php security

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

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

Απάντηση
sofrr
Δημοσιεύσεις: 50
Εγγραφή: 20 Δεκ 2005 21:22
Τοποθεσία: Πειραιάς

php security

Δημοσίευση από sofrr » 22 Μαρ 2006 09:29

Καλημέρα σε όλο το φόρουμ. Ασχολούμαι κάμποσο καιρό με PHP και υπάρχει ένα θέμα που διαφεύγει. 'Εχω διαβάσει ότι η χρησιμοποίηση superglobal μεταβλητών $_GET[$variable],$_POST[$variable] κτλ προσθέτει πολλά στο ζήτημα της ασφάλειας από ότι αν χρησιμοποιούσα global μτβλ (δηλ. χρήση της εντολής global $variable) με την προυπόθεση βέβαια ότι στο αρχείο PHP.INI είναι ενεργοποιημένη η ρύθμιση register globals=on. Διάβασα ένα άρθρο στο www.php.net αλλά δεν μπορώ να πω ότι το κατάλαβα καλά.
Μπορεί κάποιος να μου διευκρινίσει λίγο αυτό το ζήτημα, ίσως με κάποιο παράδειγμα;
Σας ευχαριστώ εκ των προτέρων

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

php security

Δημοσίευση από panosru » 22 Μαρ 2006 16:35

ego pantos se selides pou apeto "sequrity" (kai to bazo se eisagogika giati prakthka den mporeis na epityxeis to teleio sequrity para mono an den exeis online to site! :P )

loipon elega oti se selides pou apeto na exo sequrity opos px mia perioxh gia meloi kano to eksis:
exo mia forma login me username kai password

1) elenxo an to host ap' opou proerxete o xrhsths an einai to idio me ayto pou exo thn forma login

2) an to 1o apodidei true elenxo an to username pou exei kataxorisei o xrhsths anhkei sta onomata xrhston pou exo sthn bash mou

3) an to 2o apodidei true elenxo an to password pou exei plhkrologisei o xrhsths aytos einai to idio me ayto pou exo sthn bash mou

4) an to 3o apodidei true dimiourgo ena session opou exei px permision = true kai ton kano redirect sthn selida opou prepei na exei prosbash

5) molis ginei to redirect elenxo an to permision einai true kai an proerxete apo to host opou perimeno.

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

php security

Δημοσίευση από softius » 22 Μαρ 2006 17:47

Αυτό που αναφέρεις για register globals=on είναι δυνατόν να αποφέρει αρκετά προβλήματα σε ένα site, γι' αυτό και στις περισσότερες περιπτώσεις θα τα δεις να είναι OFF. Τώρα τι ακριβώς συμβαίνει όταν είναι ΟΝ; Όποιες παραμέτροι βρίσκονται μέσα στο _GET και _POST δηλώνονται αυτόματα και ως μεταβλητές. Για παράδειγμα το url index.php?action=login&username=user&password=pass θα δημιουργούσε τις ακόλουθες μεταβλητές με τις αντίστοιχες τιμές:

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

$action = 'login'
$username = 'user'
$password = 'pass'
Ποιο είναι το πρόβλημα; θα διερωτάτε ο αναγνώστης. Το πρόβλημα είναι ακριβώς αυτό, δηλαδή ότι ο χρήστης (ιδιαίτερα ο κακός και πονηρός) μπορεί να περάσει τις δικές του μεταβλητές και τιμές. Και σε συνδυασμό με ένα κακογραμμένο κώδικα, είναι δυνατόν να αποκτήσει πρόσβαση. Ας δούμε όμως ένα απλό παράδειγμα. Ας υποθέσουμε ότι έχουμε τον ακόλουθο κώδικα:

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

...
if ( ..... ) {
   $logged = 1;
}
...
if ( $logged == 1 ) {
  ....
}
Άν κάποιος τρέξει το script με το ακόλουθο url index.php?action=login&logged=1 θα αποκτήσει πρόσβαση λόγω της μεταβλητής από το url. Ελπίζω να είναι κατανοητό. Ένας καλός τρόπος λύση με τα globals ΟΝ είναι η αρχικοποίηση των μεταβλητών μας.

PS: το παράδειγμα είναι επίτηδες απλό και χαζό :p δεν συνηθίζω να γράφω τέτοιο κώδικα :D :p

sofrr
Δημοσιεύσεις: 50
Εγγραφή: 20 Δεκ 2005 21:22
Τοποθεσία: Πειραιάς

php security

Δημοσίευση από sofrr » 22 Μαρ 2006 19:53

OK μέχρι εδώ. Θα μπορούσες όμως να μου εξηγήσεις τι εννοείς με τον όρο "αρχικοποποίηση μεταβλητής;"

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

php security

Δημοσίευση από panosru » 22 Μαρ 2006 20:00

episeis aksizei na epishmanoume pos o teleios tropos sigkrishs 2 ontothton einai na xrhshmopoihsoume thn strcmp() function. h strcmp pernei 2 orismata kai ta sygkrinei "leksikografika" (lexigraphicaly) episeis gnosth san dictionary ordering mias kai exei xrhshmopoihthei me thn idia logikh gia na katatasei tis lekseis sta leksika). h strcmp() epistrefei 0 an ta dyo orismata einai panomoiotypa (idia).

px aytos o kodikas tha mas problhmatize poly an den yphrxe h strcmp:

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

<?php

$foo = "foo";
$bar = 0;

if &#40;$foo == $bar&#41;
&#123;
	echo "To &#123;$foo&#125; einai iso me to &#123;$bar&#125;";
&#125;
else 
&#123;
	echo "To &#123;$foo&#125; den einai iso me to &#123;$bar&#125;";
&#125;

?>
o logos pou symbainei ayto einai epidi to $foo einai string kai to $bar einai integer etsi to Zend Engine ta metatrepei se ena koino eidos gia na ginei h sigkrish. Opote to "foo" tha ginei 0 ara 0 == 0 (=) true

opote gia na sygkrinoume to "foo" me to 0 tha xrhshmopoihsoume ayton ton kodika

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

<?php

$foo = "foo";
$bar = 0;

if &#40;&#40;strcmp&#40;$foo, $bar&#41;&#41; == 0&#41;
&#123;
	echo "To &#123;$foo&#125; einai iso me to &#123;$bar&#125;";
&#125;
else 
&#123;
	echo "To &#123;$foo&#125; den einai iso me to &#123;$bar&#125;";
&#125;

?>

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

php security

Δημοσίευση από softius » 22 Μαρ 2006 20:09

"αρχικοποίηση μεταβλητής" είναι η πρώτη τιμή που παίρνει μία μεταβλητή. Δηλαδή, στο παράδειγμα που έγραψα κατά την αρχικοποίηση( πρίν από το πρώτο if) η μεταβλητή θα μπορούσε να πάρει την τιμή false, και έτσι να κάνει overwrite όποιαδήποτε τιμή, που πιθανόν να έπαιρνε από το url.

Άβαταρ μέλους
softius
Script Master
Δημοσιεύσεις: 241
Εγγραφή: 11 Ιαν 2004 19:07
Επικοινωνία:

php security

Δημοσίευση από softius » 22 Μαρ 2006 20:13

panosru ορθό αυτό που αναφέρεις. Εναλλακτικά κάποιος μπορεί να χρησιμοποιήσει το === κατά τον έλεγχο του if. Οπότε το

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

if &#40;&#40;strcmp&#40;$foo, $bar&#41;&#41; == 0&#41; &#123;


μπορεί να γραφτεί διαφορετικά ως εξής:

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

if &#40; $foo === $bar &#41; &#123;

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

php security

Δημοσίευση από cherouvim » 22 Μαρ 2006 21:18

Arhikopoihsh tis $action se "default".

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

$action = isset&#40;$_GET&#91;"action"&#93;&#41; ? $_GET&#91;"action"&#93; &#58; "default";

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

php security

Δημοσίευση από panosru » 23 Μαρ 2006 01:28

softius symfono apla ekei prepei na prosexoume me tis times pou perimenoume apo kapoia metablhth, px:

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

<?php

$foo = 1;
$bar = "1";

if &#40;$foo === $bar&#41;
&#123;
	echo "To &#123;$foo&#125; einai iso me to &#123;$bar&#125;";
&#125;
else 
&#123;
	echo "To &#123;$foo&#125; den einai iso me to &#123;$bar&#125;";
&#125;

?>
ena poly synithismeno lathos pou den einai liges oi fores pou spame to kefali mas epidi den kseroume ti typos einai h metablhth pou perimenoume, to mono pou mporoume na kanoume einai se periptosh pou kseroume pos to $foo kai to $bar tha mas epistrepsei sigoura kapoio integer mporoume na kanoume ayto:

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

<?php

$foo = 1;
$bar = "1";

if &#40;&#40;int&#41; $foo === &#40;int&#41; $bar&#41;
&#123;
	echo "To &#123;$foo&#125; einai iso me to &#123;$bar&#125;";
&#125;
else 
&#123;
	echo "To &#123;$foo&#125; den einai iso me to &#123;$bar&#125;";
&#125;

?>
an kai se genikotera einai protimotero to strcmp giati kanei leksikografiko elenxo to === (identical operator) apetei kai tis dyo ontothtes na exoun idio typo prin na ginei mia epityxhmenh syggrish

Απάντηση

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

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

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