La société de Matthias Winkelmann décida de prendre la route (piégée) de l'outsourcing et délocalisa une partie des travaux de développement dans quelques sociétés offshore. Il s'avéra que le prix horaire pour certains développeurs offshore étaient deux fois moindre que ce que coûtaient les développeurs "maisons". Les managers firent leurs calculs et découvrirent qu'ils pouvaient optimiser leurs profits.

Les développeurs maisons se sont vu demander de passer "seulement un peu de temps" sur le projet -- pas de conseils techniques, pas d'assistance au développement, pas même un coup d'œil aux sources. Ils étaient seulement là pour assister les testeurs dans la "communication de problèmes techniques effectifs" avec l'équipe délocalisée. De façon assez prévisible, il y avait beaucoup de problèmes techniques et donc beaucoup de "communication de problèmes techniques effectifs", aussi leur travail commença à prendre plus que "seulement un peu de temps".

Un problème que les testeurs remarquèrent était que n'importe qui pouvait se connecter avec le mot de passe " or 1=1 --. Les développeurs maison expliquèrent à leurs homologues du bout du monde que c'était une "Injection SQL" et qu’ils devaient régler le problème. Les développeurs offshore semblaient plutôt mal à l'aise avec le concept -- comment pouvait on déjouer une attaque sophistiquée où l’utilisateur saisit une simple quotte? L'équipe interne étant familière avec les astuces préventives, elle leur transmit un article qu'un membre de l'équipe avait écrit, l'équipe distante leur assura qu'ils allaient régler le problème.

Plusieurs semaines de test-échec-explication-explication-explication-correction passèrent avant que les testeurs ne rencontrent un autre problème délicat. Ils avaient de façon aléatoire une erreur : "texte entré invalide. Veuillez corriger" mais ne pouvaient comprendre pourquoi. Les développeurs maison jetèrent un coup d'œil et furent eux aussi déconcertés -- le système semblait détester certaines données de test, spécialement les noms Seth, Amande et Georges— heureusement, ils avaient une opportunité de corriger le problème: De façon assez prévisible toujours, l'équipe offshore avait facturé trois fois le temps prévu, les managers décidèrent donc de faire réparer le problème, ainsi que les autres, par l'équipe interne.

Après quelques heures de descente dans les entrailles d'un code inconnu, l'équipe maison fut en mesure de comprendre le problème. Comme cela était prévisible, l'équipe offshore n'avait pas lu l'article sur l'injection SQL, ils avaient à la place inventé leur propre mécanisme de défense dont Seth, Amanda et Georges étaient les victimes collatérales…

function checkForBadSql($sqlcode)
{
global $CONTEXT, $ERROR_TEXT;

$badSqlCode[] = 'create';
$badSqlCode[] = 'database';
$badSqlCode[] = 'table';
$badSqlCode[] = 'insert';
$badSqlCode[] = 'update';
$badSqlCode[] = 'rename';
$badSqlCode[] = 'replace';
$badSqlCode[] = 'select';
$badSqlCode[] = 'handler';
$badSqlCode[] = 'delete';
$badSqlCode[] = 'truncate';
$badSqlCode[] = 'drop';
$badSqlCode[] = 'where';
$badSqlCode[] = 'or';
$badSqlCode[] = 'and';
$badSqlCode[] = 'values';
$badSqlCode[] = 'set';

//test if sql code is bad
if (preg_match('/\s['.implode('|',$badSqlCode).']+\s/i', $sqlcode))
{
//bad sql found -- hack attept! Abort
$ERROR_TEXT = "Invalid text was entered. Please correct.";
return 0;
}

return 1;
}