Newsgroup: it.comp.www.php
Titolo: Mysql e bastardi che s'intrufolano ;)

Poco tempo fa in un thread si discuteva sul fatto che esporre le
variabili delle query senza verificare ciò che vi veniva immesso, era
una potenziale falla enorme.
Da qualche altra parte ho letto che mysql (al contrario di postgre e un
altro) non permette le query multiple.
Orbene ne posso dedurre che se anche espongo talune variabili (chessò
l'order by per esempio) ciò non sia un attentato alla sicurezza del db,
perchè tanto non vi si potrà mai insinuare qualcosa di pericoloso?
Grazie
Cla

 wrote in message
news:afs6hu$kjb$1...@lacerta.tiscalinet.it...

Un injection possibile e':
SELECT * FROM carello WHERE SID='$sid'
mettendo un altro sid. Ad esempio
xxx.domincio.com/query.php?sid=879817239ab23f
 si cambia il sid con qualcosa
come:
 $sid="' or 1 or '";
creando un where che si legge cosi' (dipende da addslashes pero'):
SELECT * FROM carello WHERE SID='' or 1 or '';
e si legge tutto quello che sta nel carello.
Questo sarebbe nel nostro esempio gia' *DRAMMATICO* se non mettiamo un
controllo adeguato sul SID:
  UPDATE carello SET Quantita=999 WHERE SID='' or 1 or '';
Senza addslashes una query su un Index (nel URL oppure un Hidden nel form
basta un: IDX=0%20or%201):
  UPDATE carello SET Quantita=999 WHERE IDX=0 or 1;
UPDATE Anagrafica SET email='$nuovaEmail' WHERE IDX=0 or 1;
E *TRAK*, tutti email del DB valgono nihil.
Stessa cosa per altri query in cui vengono presentati multipli valori, la
fantasia non ha limite.

Per quanto riguarda i tuoi esempi sul carrello:
anche se succedesse, cosa comporterebbe?
Cioč un "hacker" che si mette tutti i prodotti di un sito nel carrello,
che danni comporta?
L'esempio dell'update č piů pericoloso, e a tal proposito mi viene
un'altra domanda:
ad una mia affermazione tipo "ma quelle variabili le passi in post, e
cosě stai piů protetto" qualcuno rispose:
non č vero, uno che vuole bucarti ha tutti gli elementi per farlo.
Allora preso in considerazione che:
le variabili post sono interne al server
gli sript php (che io sappia) a meno di downloadare il file, non sono
mai visualizzabili dal client
da che parte si possono ricavare i dati di una form?
Claudio

da che parte si possono ricavare i dati di una form?
Dal sorgente della pagina ?
Bonf

 le variabili post sono interne al server
Un cracker malintenzionate puo' mandare qualsiasi cosa in POST/GET/Cookie al
Server. Basta un programmino come curl (simila a wget) e manda quello che
vuole.

 vuole.
Mi intrufolo =)
Si è vero che un cracker ti può mandare qualsiasi cosa con un
post/get/cookie... ma è anche vero che tutto dipende dall'amministrazione
del server... come vien detto da molti non c'è una sicurezza assoluta quindi
un sito se "deve" morire morirà.
Mi sembra però più accettabile avere le variabili "hidate" dal POST più che
averle in chiaro... così almeno se proprio vogliono far qualcosa devono per
forza scaricare il sorgente... dato che ciò che il client riceve è solo HTML
senza stralci di sorgente php...
solo lavoro da fargli fare in più che scoraggia solo i lamer...
Ovviamente mia opinione personale =)

senza stralci di sorgente php...
Vabe' fate come volete ....
Bonf

 senza stralci di sorgente php...
Sei sicuro di sapere quello che dici?
Il sorgente non serve. Facilita' solo di capire quello che sta dietro. Ma
mandare dati in POST o GET e veramente un giochino.
E se il programmatore non ha blindato alcuni parti (in questa caso non serve
un FW o un amministratore, si parla di 80) una intrusione puo' causare danni
gravi.
Recentemente avevo ancora provato su un sito che tiene un database. Puoi
fare delle query via un form. I dati sono sensibili e non ti danno tanti
dati (per evitare che ti tiri giu' tutto). Insomma, cera un parametro offset
per determinare il punto dal quale vedere un certo dato.
   Offset=1000 per prendere il millesimo record,
poi un faked con offset=1000,1 e dava un mysql result error.
Bene, valore non blindato e allora si prova un
  offset=0,1000000#  e voila ti dava (e tuttora lo da) tutto il database
Funziona perche' # serve come commento e quindi il
  LIMIT $offset,1
diventa
  LIMIT 0,1000000#,1
Tutto questo senza sorgenti e neanche a scrivere un HTML per mandare in
POST. In questo caso bastava una querystring manipolata.