Najčastejšie sú útoky SQL injection a HTML injection (plus JavaScript injection). Základom je neveriť vstupom od používateľa, čiže ošetrovať údaje z GET, POST a COOKIE. Ďalšou častou chybou je includovanie súboru, ktorého meno dostaneš z parametra URL bez akejkoľvek kontroly.
Proti SQL injection vymysleli "úžasnú" ochranu (magic quotes), ktorá ošetrí vstupy od používateľa tak, aby boli bezpečné. Keď vypneš magic quotes, tak si musíš vstupy ošetrovať sám a pri vytváraní dopytov na databázu použiť napr. funkciu mysql_escape_string. Podľa mňa je najlepšie vypnúť magic quotes a pripraviť si hodnoty parametrov do premenných, ktoré sa potom použijú v SQL dopyte, napr. takto:
$cislo = (int) $_GET ["cislo"];
$retazec = mysql_escape_string ($_GET ["retazec"]);
$bool = ($_GET ["bool"]? "1": "0");
mysql_query ("select * from table where cislo=$cislo and retazec='$retazec' and bool=$bool");
Vloženiu HTML kódu na stránky zabrániš tak, že použiješ funkciu htmlspecialchars vždy, keď vypisuješ obsah premennej, ktorá sa má zobraziť ako čistý text. Ak pridávaš text ako hodnotu parametra URL, použiješ urlencode. HTML/JavaScript injection si môžeš vyskúšať na živě.sk/cz.
Ďalšími dobrými opatreniami proti útokom je vypnutie globálnych premenných (register globals), zakázanie prechádzania adresármi, nevypisovanie (ale logovanie) chýb a podobne.