sql security

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

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

Απάντηση
Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:01

Καλησπερα...

ψαχνω της τελευταιες μερες καποιο βοηθημα ωστε να φτιαξω μια συνδεση php -> sql db ποιο σωστη!


Η σελιδα θα ειναι ενα ερωτηματολογιο το οποιο θα περιεχει 5 ερωτηματα ολα στην ιδια σελιδα το θεμα ειναι οτι τα δεδομενα θα πηγαινουν στην βαση μου με την μεθοδο post.

Επομενος αναζητω καποιο βοηθημα για να την κανω ποιο ασφαλη την ολη κατασταση!


Υπαρχει καποιο λινκ ή καμια συμβουλη επι του θεματος;

ευχαριστω :)

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:16

Αυτό που μπορείς να κάνεις για να πεις ότι τα δεδομένα που παίρνεις από τον χρήστη είναι "ασφαλή" είναι να τα φιλτράρεις.

Π.χ. με τα built-in functions της php να ελέγχεις τον τύπο δεδομένων του κάθε πεδίου. Πιο συγκεκριμένα: το πεδίο e-mail θέλει ειδικό validation για να δεις αν είναι e-mail σωστής μορφής. Το πεδίο π.χ. Ταχυδρομικός Κωδικός πρέπει να είναι αριθμός και το ελέγχεις ανάλογα.

Αυτό μπορείς να κάνεις για αρχή. Το επόμενο βήμα είναι να βάζεις το mysql_real_escape_string() function στα SQL queries σου εκεί που είναι το user input.

Δηλαδή:

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

$sql = "INSERT INTO myTable (ID, value)
VALUES ('0', '".mysql_real_escape_string((string) $value)."');";

if ( ! ( $result = mysql_query($sql) ) ) {
   die('Could not execute MySQL query.');
}
Κάτι άλλο δεν πιστεύω να χρειάζεται.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:31

ευχαριστω για την απαντηση!

να ρωτησω το " mysql_real_escape_string()" τι ακριβως κανει;

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

sql security

Δημοσίευση από Pavel » 28 Απρ 2011 20:34

google is your friend:
http://php.net/manual/en/function.mysql ... string.php

δεν αρκεί μόνο αυτό όμως. εάν δεν φιλτράρεις και τις numeric μεταβλητές σου έχεις σοβαρό πρόβλημα sql injection.

ψάξε στο google για "sql injection cheat sheet"
Εσύ είσαι τρελός.

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:37

Το mysql_real_escape_string() είναι function της PHP το οποίο αποτρέπει τα SQL Injections. Πρέπει να το χρησιμοποιείς πάντα στα query σου έτσι ώστε να μην περνάνε τα SQL attacks.

Αν θες να διαβάσεις περισσότερα για τα SQL Injections δες εδώ.

Τι ακριβώς κάνει το mysql_real_escape_string():

Μετατρέπει τα ' (μονά εισαγωγικά σε \' δηλαδή τα κάνει escape όπως λέμε).

Περισσότερα για το mysql_real_escape_string στο php.net

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:38

ναι το εψαξα αφου εκανα το ποστ... :P

btw εαν κανω check τα παιδια μεσω js θα εχω θεμα αντι να τα κανω με php;

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:39

Θα έχεις θέμα γιατί το validation δεν θα γίνει αν ο χρήστης απενεργοποιήσει την javascript. Το καλύτερο που μπορείς να κάνεις είναι να έχεις και τους δύο ελέγχους.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:39

και κατι ακομα αν κανω την μεταφορα τον δεδομενον με post και οχι με get δεν ειναι ποιο ασφαλες;

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

sql security

Δημοσίευση από Pavel » 28 Απρ 2011 20:40

Ναι, θα έχεις πρόβλημα επειδή μπορώ να απενεργοποιήσω τον έλεγχο της javascript που θα βάλεις.

Όχι, δεν είναι πιο ασφαλές.

Και ΜΗΝ βασίζεστε μόνο στην mysql_real_escape_string(). Είναι άχρηστη σε αριθμητικές μεταβλητές.
Εσύ είσαι τρελός.

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:41

Όπως το πάρει κανείς... Και εξαρτάται τι θες να κάνεις. Στην περίπτωσή σου η μέθοδος POST είναι προτιμότερη.

Γιατί αν το κάνεις με GET μετά κάποιος μόνο από το URL θα υποβάλλει την φόρμα γιατί θα μπορεί να περνάει τις παραμέτρους από το URL. Καλύτερα με POST.

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:42

Pavel έγραψε:Και ΜΗΝ βασίζεστε μόνο στην mysql_real_escape_string(). Είναι άχρηστη σε αριθμητικές μεταβλητές.
Γι' αυτό είπα να κάνει και numeric check.

Τα πεδία που είναι αριθμός, π.χ. Τ.Κ. θα τα κοιτάς με το is_numeric() για να δεις αν είναι αριθμός.

Αν θες να ελέγξεις ένα πεδίο για ακέραιο αριθμό βάζεις το is_integer(). Γενικά έχει πολλά functions για validation checks η PHP.

Πάντα, πάντα όμως, να φιλτράρεις τα δεδομένα σου.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:44

εμενα τα παιδια θα ειναι τα εξης:

1. Ονομα
2. Επιλογης
3. Επιλογης
4. Επιλογης
5. Επιλογης

επομενος εκτος απο το mysql_real_escape_string() τι αλλο θα με συμβουλευατε να κανω;

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:46

Το όνομα είναι μόνο γράμματα - εκτός αν κάποιος λέγεται 007.

Τα επιλογής μπορείς να τα κάνεις είτε να περνάς την τιμή σε αριθμό (π.χ. <option value="1">Επιλογή</option>) και μετά να κάνεις numeric check ή να περνάς τις τιμές σαν αλφαριθμητικά: <option value="epilogi">Επιλογή</option>

Όπως θες.

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

sql security

Δημοσίευση από kapoios001 » 28 Απρ 2011 20:49

Εντάξει τι άλλο μπορείς να κάνεις... Είναι παρατραβηγμένες οι άλλες μέθοδοι που χρησιμοποιούνται.

Μπορείς αν θες να κοιτάς αν το request έγινε από τον server σου από μια συγκεκριμένη σελίδα ελέγχοντας το $_SERVER['HTTP_REFERER'] για να δεις αν ήρθε από την σελίδα που περίμενες.

Άλλο τι μπορείς να κάνεις... Αν έχεις σύστημα εισόδου να ελέγχεις αν ο χρήστης έχει κάνει login και να μην υποβάλλει την φόρμα κάποιος μη-εγγεγραμένος χρήστης.

Μπορείς αν θες να βάλεις και ένα captcha (εικόνα επιβεβαίωσης - γνωστή και ως confirmation image) για να βεβαιωθείς ότι η υποβολή της φόρμας έγινε από άνθρωπο και όχι από κάποιο αυτοματοποιημένο bot (πρόγραμμα που υποβάλλει ότι φόρμα βρει).

Εξαρτάται από σένα τι θες να κάνεις.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

sql security

Δημοσίευση από p_pan » 28 Απρ 2011 20:50

Μαλλον θα τα χρειαστω ολα...
δλδ:

2 πεδια (ονομα + περιοχη) θα ειναι αλφαριθμητικά ενω τα 4 επιλογης θα ειναι αριθμητικα...

επομενος θα κανω ελενχο σε ολα!!!

να ρωτησω και κατι ακομα.. πως μπορω να κανω εναν ελενχω για το οτι τα δεδομενα ερχοντε απο την δικη μου σελιδα..;

Με μια απλη μεταβλητη και εναν ελενχο if θα ηταν οκ;
Αγράματος...

Απάντηση

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

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

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