In my first AttachInterrupt attempt I found the same problem. Brushing my two bits of hookup wire together [my 'switch'] produced anything up to 5 interrupts. My not-so-sophisticated debounce routine consisted of ignoring any interrupt within a second of the previous one. My needs were simple so this sufficed.
//globals.
long lastint = 0; //when last interrupt occurred.
...
void int0_isr()
{
if(abs(millis() - lastint) < 1000)//less than a sec since last int.
{
lastint = millis();
return;
}
Serial.println("int0 called");
lastint = millis();
...