$_GET, $_POST και άλλες μεταβλητές...

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

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

Απάντηση
Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 16 Νοέμ 2006 23:09

Γεια σε όλους!

Θα ήθελα να ρωτήσω ποιος είναι ο πιο ασφαλής τρόπος για να χρησιμοποιήσουμε κάποιες μεταβλητές. Όλοι ξέρουμε ότι το $_GET παίρνει δεδομένα από το URL και το $_POST δεδομένα από μία φόρμα. Φυσικά υπάρχουν και άλλες μεταβλητές εκτός του $_GET και του $_POST όπως το $_SESSION, $_COOKIES και $_FILES (υπάρχουν και άλλα, απλά δεν θα θα γράψω όλα!)...

Ένας πολύ απλός και έξυνος τρόπος για να αυξήσουμε την προστασία της εφαρμογής μας θα ήταν ότι δεδομένα παίρνουμε να τα φιλτράρουμε με το function addslashes() (αν ο server έχει απενεργοποιημένα τα magic_quotes).

Αυτό μπορούμε να το ελέγξουμε έτσι:

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

<?php

$var = $_GET&#91;'var'&#93;;

if &#40;!get_magic_quotes_gpc&#41;
&#123;

$variable = addslashes&#40;$var&#41;;

&#125; else &#123;

$variable = $var;

&#125;

?>
Το παραπάνω απλά βάζει τα μαγικά εισαγωγικά για να αποφύγουμε τα SQL Ιnjections (τουλάχιστον όσο γίνεται). Αυτό που θέλω να ρωτήσω είναι να μου πείτε άλλους τρόπους που μπορούμε να αυξήσουμε την ασφάλεια σε μία εφαρμογή (πχ από SQL Injections) ή από άλλου είδους επιθέσεις.

Δεν γνωρίζω πολύ καλά τα θέματα επιθέσεων και δεν είμαι αρκετά εξικοιωμένος με την PHP ακόμη. Θέλω επίσης να μου πείτε ποιους τρόπους πρέπει να χρησιμοποιήσουμε για να αυξήσουμε την ασφάλειά μας ή την ασφάλεια του χρήστη κλπ.

Επίσης αν σας είναι εύκολο εξηγήστε μου την διαφορά μεταξύ του $_GET[] και του $HTTP_GET_VARS[] (το ίδιο και για τις άλλες μεταβλητές δηλαδή:

$_*[] -> $HTTP_*_VARS[]

Ποια είναι η διαφορά τους και τίθεται ζήτημα ασφαλείας αν χρησιμοποιηθεί $_GET ή $HTTP_GET_VARS? Ποιο είναι πιο ασφαλές και γιατί;

Συγνώμη αν σας κούρασα.

Ευχαριστώ πολύ

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

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cherouvim » 17 Νοέμ 2006 08:09

Το $HTTP_GET_VARS είναι παλιό και υπάρχει απλά για να τρέχουν τα παλιά scripts.

Διάβασε: http://gr2.php.net/manual/en/language.v ... efined.php

Για security: http://phpsec.org/projects/guide/

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cpulse » 17 Νοέμ 2006 11:18

Ναι το $_GET μεταφέρει τις ίδιες τιμές με το $HTTP_GET_VARS απλά ποιο σύντομο.

Τώρα για τα άλλα που λες.. τα $_GET $_POST και $_COOKIE μεταφέρουν δεδομένα ακριβώς με τον ίδιο τρόπο, δηλαδή μέσα από HTTP headers. Η διαφορά είναι ο τρόπος χρήσης από τον user. Τα $_GET φαίνονται στα URLs, τα $_POST βγαίνουν από φόρμες και τα cookies από το directory των cookies.

Αν θες προστασία κάνε άλλα πράγματα.. για μικρο προστασία κάντους base64 ή url encoding. Για ποιο σωστή προστασία μετέφερνε τα από κανάλια SSL. Για ακόμα ποιο ζόρικη προστασία φτιάξε κανένα δικό σου αλγόριθμο.

Αυτό με το addslashes και τα magic quotes κατά την γνώμη μου είναι πολύ μαζοχιστικό. Δεν βοηθάει σχεδόν καθόλου γιατί αλλάζει λίγους χαρακτήρες και δημιουργεί πολλά προβλήματα. Πχ φαντάσου να θες να εμφανίσεις κάποια μεταβλητή από το $_GET['var']

Θα έπρεπε να γράψεις κάτι σαν

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

echo htmlspecialchars&#40;$_GET&#91;'var'&#93;&#41;;
Με το addslashes θα πρέπει να βγάλεις τα slashes πρώτα

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

echo htmlspecialchars&#40;stripslashes&#40;$_GET&#91;'var'&#93;&#41;&#41;;
Και σκέψου οτι ο κώδικας που γράφεις μπορεί να ξεχαστεί για λίγο καιρό, να τον ξαναπιάσεις μετά από κανένα χρόνο για να κάνεις μια μικρή αλλαγή και να ξεχάσεις οτι χρειάζεται stripslashes.. φαντάσου πόσα bugs μπορεί να μπούνε από το 0 και πόσο μπορεί να απογοητεύσεις τον εαυτό σου γιατί θα φοβάσαι να πειράξεις τον κώδικα σου με τον φόβο των bugs.

Όσο για τα sql injections η λύση φυσικά είναι το σωστό escaping με τα mysql_real_escape_string() και mysql_escape_string().. αλλά κατά την γνώμη μου η λύση ξεκινάει ακόμα ποιο πριν. Από τα συνήθεια. Πρέπει ο κάθε προγραμματιστής να συνηθίζει τον εαυτό του σε ασφαλή τεχνικές. Δηλαδή όπως πριν βγείς από το σπίτι σου ψάχνεις πρώτα τις τσέπες σου αν έχεις κλειδιά, έτσι κι όταν γράφεις ένα SQL statement θα πρέπει να συνηθίσεις να αναρωτιέσαι αν έκανες σωστά escapings.

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 17 Νοέμ 2006 11:27

Πολύ ωραία links, ευχαριστώ!

cpulse πολύ σημαντικές συμβουλές ευχαριστώ πολύ!!!

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cpulse » 17 Νοέμ 2006 11:29

Οπ.. τώρα που ξαναδιαβάζω αυτά που έγραψα..
Για να μη παρεξηγηθώ (όπως το συνηθίζω), αυτό για τον μαζοχισμό για τα magic quotes δεν το λέω προσωπικά για εσένα. Το λέω γενικά γιατί υπάρχουν διάφοροι που τους αρέσει αυτό το σύστημα.

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 17 Νοέμ 2006 11:47

ΟΚ δεν είπαμε τίποτα μεγάλε... Εντάξει δημιουργεί προβλήματα μερικές φορές το addslashes() αλλά το mysql_real_escape_string() και το mysql_escape_string(), για ποιες εκδόσεις της PHP δουλεύουν;

Ευχαριστώ πολύ για την βοήθειά σου :)

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cpulse » 17 Νοέμ 2006 13:45

mysql_escape_string() από PHP 4.0.3 και πάνω αλλά έχει αναφερθεί κάποιο πρόβλημα με ελληνικούς χαρακτήρες
mysql_real_escape_string() από PHP 4.3.0 και πάνω

ένα function που χρησιμοποιώ είναι αυτό

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

function db_esc&#40;$input&#41; &#123;
	if &#40;function_exists&#40;'mysql_real_escape_string'&#41;&#41; return mysql_real_escape_string&#40;$input, $GLOBALS&#91;'db_h'&#93;&#41;;
	if &#40;function_exists&#40;'mysql_escape_string'&#41;&#41; return mysql_escape_string&#40;$input&#41;;
	return addslashes&#40;$input&#41;;
&#125;
στο οποίο υποτίθεται οτι το global variable $db_h είναι το αποτέλεσμα του mysql_connect()

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 17 Νοέμ 2006 13:50

και τι θα γίνει με τους ελληνικούς χαρακτήρες τότε; Αν έχουμε κάποιο forum ή κάτι άλλο που γράφουμε στα ελληνικά και βγάλει πρόβλημα την βάψαμε! Τι προβλήματα βγάζει; Υπάρχει και κάποιο άλλο function που μπορεί να κάνει την δουλειά του mysql_real_escape_string ???

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cpulse » 17 Νοέμ 2006 14:09

Είχα βρει πολύ παλια κάποια αναφορά στα contributions του mysql_escape_string().. αλλά τώρα πια έχει εξαφανιστεί.

Τα contributions που φαίνονται στο php.net δεν είναι πάντα σωστά οπότε μπορεί να έγραψε κάποιος κάτι, να κατάλαβαν μετά οι admins οτι δεν είναι αληθές και να το βγάλαν.

Πάντως στις δικές μου δουλειές δεν έχω βρει μέχρι στιγμής πρόβλημα. Ή τουλάχιστον δεν έχω αντιληφθεί πρόβλημα.

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 19 Νοέμ 2006 16:38

Να 'σαι καλά cpulse και ευχαριστώ για τις συμβουλές σου μέχρι στιγμής. Σε κάποια manuals που έχω διαβάσει λένε να τοποθετούμε τα δεδομένα μέσα σε arrays.. Γιατί αυτό;

Πχ:

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

<?php

$clean = array&#40;&#41;;

$email_pattern = '/^&#91;^@\s<&>&#93;+@&#40;&#91;-a-z0-9&#93;+\.&#41;+&#91;a-z&#93;&#123;2,&#125;$/i';

if &#40;preg_match&#40;$email_pattern, $_POST&#91;'email'&#93;&#41;&#41; 
&#123; 
    $clean&#91;'email'&#93; = $_POST&#91;'email'&#93;; 
&#125;

?>
τοποθετεί το email που έχει υποβληθεί από μία φόρμα, μέσα στο array. Μήπως γνωρίζετε τον λόγο που γίνεται αυτό; Μήπως τα array είναι πιο ασφαλή και πρέπει να τα χρησιμοποιούμε στα script μας περισσότερο; Επίσης το παραπάνω παράδειγμα είναι αρκετά καλό γιατί βλέπει μέσω ενός pattern αν οι χαρακτήρες είναι σωστοί, και αν ναι, τότε το πετάει στο array. Αλλά γιατί...;

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από cpulse » 20 Νοέμ 2006 15:26

Ίσως για να είναι ποιο οργανωμένες οι μεταβλητές;
Πάντως έτσι κι αλλιώς όλα σε arrays είναι.. ακόμα και οι χύμα μεταβλητές βρίσκονται απο το array $GLOBALS

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

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από panosru » 20 Νοέμ 2006 15:38

akribos, an thes trekse ayto na deis:

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

<pre>
    <?php print_r&#40;$GLOBALS&#41;; ?>
</pre>

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 20 Νοέμ 2006 15:50

Ευχαριστώ πολύ παιδιά!

Θα ήθελα να με βοηθήσετε να κατανοήσω τα patterns. Έχω διαβάσει από το php.net πως σχηματίζονται κλπ, και ποιο είναι το συνακτικό τους και ποιες είναι οι μεταβλητές τους, αλλά τα Αγγλικά μου δεν είναι αρκετά καλά και δεν μπορώ να κατανοήσω τι λένε και δεν μπορώ να τα χρησιμοποιήσω (είναι και χρήσιμα!).

Μήπως θα μπορούσατε να μου πείτε περιληπτικά που μπαίνει το καθένα, τι κάνει το καθένα (ξέρω είναι πολύ βλακεία μου αυτό), ή αν σας είναι εύκολο και γνωρίζετε κάποιο link που τα γράφει στα ελληνικά να μου το δίνατε;

Ευχαριστώ πάρα πολύ!

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

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από panosru » 20 Νοέμ 2006 16:16

an exeis oreksi propanton kai xrono fysika des ta parakto:

Reqular Expressions
ayta einai kapoia apo ta oliga pou thymamai, spiti exo kai alla :P

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

$_GET, $_POST και άλλες μεταβλητές...

Δημοσίευση από _Invisible_ » 20 Νοέμ 2006 16:31

είσαι τέλειος! Αν και δεν είναι στα Ελληνικά, θα τα καταλάβω, απλά μου είναι δύσκολο μερικές φορές να μεταφράζω κάποια μέρη των κειμένων τους.

Μην μου πείτε να χρησιμοποιήσω translator machine γιατί είναι χάλια! Και νόημα δεν βγάζεις και μπερδεύεσαι περισσότερο! Τέσπα, ευχαριστώ πολύ!

Αν δεν είχα όρεξη, τι κάνω εδώ να ρωτάω τότε; Δυστυχώς ο χρόνος είναι λίγος, αλλά κάτι θα κάνουμε... Ξεκλέβουμε από παντού για την μεγάλη μας αγάπη (προγραμματισμός - τουλάχιστον για μένα).

Απάντηση

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

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

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