Prevent SQL injection - PHP & MySQL security

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από vcore » 28 Μαρ 2005 17:12

ΓΙα το πρώτο κάτι γίνεται για το δεύτερο δεν σκιάζομαι γιατί ποτέ δεν χρησιμοποιώ Ετοιματζίδικα! ;)

Ευχαριστώ mister!
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Άβαταρ μέλους
iNDEFiX
Honorary Member
Δημοσιεύσεις: 2569
Εγγραφή: 20 Δεκ 2002 00:48
Τοποθεσία: κλειστή λόγω έργων
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από iNDEFiX » 29 Μαρ 2005 14:47

Ego to kalitero pou exo na proteino se periptoseis delete i update einai to ekshs:

url: index.php?id=12

source:

Κώδικας: Επιλογή όλων

//Delete entry

$get_id      = $_GET['id'];
$check_int = is_int($get_id);
$check_ref = $_SERVER['HTTP_REFERER'];
$check_str = strstr($get_id,"'");

if($get_id && $check_int && $check_ref=="delete.php" && !$check_str){

  $SELECT = mysql_query("SELECT id FROM table WHERE id='$get_id'",$db);
  $RESULT = mysql_fetch_array($SELECT)

  if($RESULT[id] == $_GET['id'];){

    $DELETE = mysql_query("DELETE FROM table WHERE id='$get_id'",$db);
  }
}

Sto parapano script ginetai elenxos tou passing variable, tou referrer, an periexei single quote kai episis an yparxei afth h engrafh sthn vash. Ola afta sthn periptosh pou to table doulevei vash twn ID kai einai se auto_increment. Einai ligo periploko alla to kalo einai oti apotrepei gia ta kala ta injections.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27617
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από cordis » 29 Μαρ 2005 17:06

πολύ ωραίο... φίλαγε τα ρούχα σου για να έχεις τα μισά.. ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
hik-hok
Reporter
Δημοσιεύσεις: 3571
Εγγραφή: 09 Μαρ 2003 10:45
Τοποθεσία: Agrrrrrrrrrr...... γάβ γάβ!!
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από hik-hok » 29 Μαρ 2005 20:31

αν έχουμε ένα link της μορφής index.php?id=12

και βάλουμε κάτι σαν το

Κώδικας: Επιλογή όλων

$key = substr($id, 0, 4);
$DELETE = mysql_query("DELETE FROM table WHERE id='$key'",$db);
κάνει δουλειά ? :roll:
Εικόνα

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από mrpc » 30 Μαρ 2005 12:34

Αυτό απλά δίνει στην mysql τα πρώτα 4 ψηφία του id. Δεν νομίζω πως θα σου κάνουν sql injection επειδή δεν χωράει σε 4 ψηφία κάποια εντολή (εκτός από το tag των σχολίων), όμως δεν κάνει κάποιο validation. Αν π.χ. το id πρέπει να είναι αριθμητικό και κάποιος περάσει text θα σκάσει sql error.
Δεν ξέρω τι θα γίνει αν οι 4 χαρακτήρες είναι κάτι σαν
1'-- (πράγμα που σημαίνει ότι η υπόλοιπη εντολή sql και τα υπόλοιπα where δεν θα παίξουν). Νομίζω ότι κάπου εδώ διάβασα ότι με αυτόν τον τρόπο της σύνταξης δεν παίζει πρόβλημα με την php γιατί κάνει escape τα '.

Άβαταρ μέλους
iNDEFiX
Honorary Member
Δημοσιεύσεις: 2569
Εγγραφή: 20 Δεκ 2002 00:48
Τοποθεσία: κλειστή λόγω έργων
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από iNDEFiX » 02 Απρ 2005 22:03

cordis έγραψε:πολύ ωραίο... φίλαγε τα ρούχα σου για να έχεις τα μισά.. ;)
Vasikotath arxh otan theleis na kaneis mia sosth douleia 8)

Άβαταρ μέλους
viktoras
Δημοσιεύσεις: 963
Εγγραφή: 05 Απρ 2001 03:00
Τοποθεσία: Γαλάτσι, Αθήνα
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από viktoras » 08 Απρ 2005 05:10

Διάβαζα ένα tutorial σήμερα και είδα να αναφέρει την mysql_escape_string()


Χμμμ... μου φαίνεται χρήσιμη [και on topic νομίζω]
<?="Hello Freestuff";?>
Quality hosting by Cityhost

Άβαταρ μέλους
iNDEFiX
Honorary Member
Δημοσιεύσεις: 2569
Εγγραφή: 20 Δεκ 2002 00:48
Τοποθεσία: κλειστή λόγω έργων
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από iNDEFiX » 08 Απρ 2005 10:09

Voithaei ;)

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από Rapid-eraser » 08 Απρ 2005 13:09

kali eivai alla dev kavei ta pavta ... o aparetitos elegxos kai n kavovikopiisi twv dedomevwv eivai o protarxikos stoxos mas pavta
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
viktoras
Δημοσιεύσεις: 963
Εγγραφή: 05 Απρ 2001 03:00
Τοποθεσία: Γαλάτσι, Αθήνα
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από viktoras » 08 Απρ 2005 13:27

Δεν διαφωνώ Rapido, απλά σκέφτομαι τώρα να ενώσω όσα ειπώθηκαν εδώ μαζί με την χρησιμοποίηση της παραπάνω construct ώστε να υπάρχει μία αίσθηση ασφάλειας.
<?="Hello Freestuff";?>
Quality hosting by Cityhost

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από Rapid-eraser » 08 Απρ 2005 13:31

8es es8isi asfalias ?
Kave unplug to pc sou apo to internet kai avoikse eva lako kapou 5 metra peta mesa to pc sou kai kalipseto me oplismevo skirodema rixtou kai eva sobavtisma apekso kai bapsto se xaki xroma va miv to evtopizouve efkola ...
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
viktoras
Δημοσιεύσεις: 963
Εγγραφή: 05 Απρ 2001 03:00
Τοποθεσία: Γαλάτσι, Αθήνα
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από viktoras » 08 Απρ 2005 19:48

Rapid-eraser έγραψε:8es es8isi asfalias ?
Kave unplug to pc sou apo to internet kai avoikse eva lako kapou 5 metra peta mesa to pc sou kai kalipseto me oplismevo skirodema rixtou kai eva sobavtisma apekso kai bapsto se xaki xroma va miv to evtopizouve efkola ...
Είπα αίσθηση ασφαλείας... δεν είπα 100% ασφάλεια.. τότε θα ίσχυε το παλίο ρητό που ανέφερες! :P
<?="Hello Freestuff";?>
Quality hosting by Cityhost

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από Rapid-eraser » 08 Απρ 2005 19:53

more kai gia 1% asfalia pali to idio prepei va kaveis :P
alla dev xriazete va pavikobli8ei olos kosmos etsi ?
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από cherouvim » 21 Αύγ 2005 09:28


Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Prevent SQL injection - PHP & MySQL security

Δημοσίευση από iffor » 04 Σεπ 2005 21:45

Hello...!!!
Είναι λίγο παλιό το topic, αλλά έχω μία απορία πάνω στο όλο θέμα...

Αναφέρθηκε σαν παράδειγμα ότι αν κάποιος πειράξει το link με το οποίο στέλνουμε μέσω GET κάποια δεδομένα για επεξεργασία, μπορεί πράγματι να μας κάνει ζημειά...

Π.χ. όπως είπατε με το link
update.php?id=3;delete from table;--
θα μπορούσε κάποιος να σβήσει τον πίνακα table...

Σαν πρώτη απορία, παρατήρηση
Στην php συνήθως το query το γράφω ως εξής
$query='update table set field1='".$field."' where id=".$id;
οπότε όταν τρέξει το query, η php θα γυρίσει λάθος (με βάση πάντα το παραπάνω παράδειγμα).
Αν όμως το ίδιο το query το τρέξω κατευθείαν από την βάση (MySQL 4.0.23) το εκτελεί κανονικά και σβήνει το table... Γιατί γίνεται αυτό;

Αν τώρα το query το γράψω ως εξής
$query='update table set field1='".$field."' where id='".$id."'";
και το εκτελέσω μέσω της php, το query θα εκτελεστεί, αλλά δεν θα λάβει υπόψιν του ότι ακολουθεί το id=3... Αυτό πάλι γιατί;

Ελπίζω να μην έγινα κουραστικός και να έδωσα κάπως κατανοητά τις απορίες μου! Άν έχουν ήδη εξηγηθεί παραπάνω, αν μπορείται κάντε το λίγο πιο λιανά γιατί σίγουρα δεν θα το κατάλαβα!

Thanx...!!! :D
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες