προβλημα με quary php mysql

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

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

Απάντηση
Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

προβλημα με quary php mysql

Δημοσίευση από alex_begos » 26 Οκτ 2010 14:42

εχω το παρακάτω κώδικα ειναι ενα search στη βαση μου.

ενω τοπικά δουλευει μια χαρα μολις το ανεβασα στο server μου δεν δουλευει σωστα και χτυπαει error:

WHERE ERGEBNIS =\'Abschluss\' Query 'WHERE ERGEBNIS =\'Abschluss\' ' failed with error message: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'Abschluss\'' at line 1"

απ' οτι καταλαβαίνω κατι γίνεται με τις μεταβλητές string και τον χαρακτήρα \ αλλα δεν βρισκω την λύση δοκίμασα addslase συναρτήσεις αλλα τιποτα παραθέτω τον κωδικα παρακάτω

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

<?php
 $blz=$_GET&#91;'blz'&#93;;
 $kontonummer=$_GET&#91;'kontonummer'&#93;;
 $ergebnis=$_GET&#91;'ergebnis'&#93;;
 $wherelist=$_GET&#91;'wherelist'&#93;;
 $name=$_GET&#91;'name'&#93;;
 $vorname=$_GET&#91;'vorname'&#93;;
 $date1=$_GET&#91;'edit1'&#93;;
 $date2=$_GET&#91;'edit2'&#93;;
 $sql="SELECT * FROM qc $wheresearch";
 $and="";
 $wheresearch="";

if &#40;!empty&#40;$blz&#41; || !empty&#40;$kontonummer&#41; || !empty&#40;$ergebnis&#41; || !empty&#40;$date1&#41; || !empty&#40;$date2 &#41; || !empty&#40;$name &#41;|| !empty&#40;$vorname &#41; &#41;&#123; 
$wheresearch="WHERE";&#125; 

 if&#40;!empty&#40;$blz&#41;&#41; &#123; $wheresearch = $wheresearch." BLZ=$blz ";$and="AND";&#125; 
 if&#40;!empty&#40;$kontonummer&#41;&#41; &#123;$wheresearch =$wheresearch." $and KONTONUMMER=$kontonummer ";$and="AND";&#125;
 if&#40;!empty&#40;$ergebnis&#41;&#41; &#123; $wheresearch =$wheresearch." $and ERGEBNIS ='$ergebnis' ";$and="AND";&#125;
 if&#40;!empty&#40;$name&#41;&#41; &#123; $wheresearch =$wheresearch." $and NAME like '%$name%' ";$and="AND";&#125;
 if&#40;!empty&#40;$vorname&#41;&#41; &#123; $wheresearch =$wheresearch." $and VORNAME like '%$vorname%' ";$and="AND";&#125;
 
 if&#40;!empty&#40;$date1&#41; && empty&#40;$date2&#41; &#41;
     &#123;$wheresearch =$wheresearch." $and CALENDARDATUM  $wherelist '$date1'";   $and="AND";&#125; 
	 
 if&#40;!empty&#40;$date1&#41; && !empty&#40;$date2 &#41;&#41; &#123;$wheresearch =$wheresearch." $and CALENDARDATUM $wherelist '$date1' AND '$date2' ";$and="AND";&#125; 

header&#40; "Location&#58; qc.php?wheresearch=$wheresearch&blz=$blz&kontonummer=$kontonummer"&#41;; 

?>



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

προβλημα με quary php mysql

Δημοσίευση από cpulse » 26 Οκτ 2010 16:50

Μάλλον έχεις ενεργοποιημένη μια ρύθμιση που λέγεται magic quotes. Με αυτή την ρύθμιση το σύστημα βάζει αυτόματα \ σε χαρακτήρες που συνήθως θέλουν ειδική αντιμετώπιση όπως τα quotes τον null character κτλ.

Η καλύτερη λύση είναι να πας στο php.ini και να απενεργοποιήσεις αυτή την ρύθμιση γιατί θα σου προκαλέσει πολλά άλλα παρόμοια προβλήματα.

Διαφορετικά θα πρέπει να χρησιμοποιήσεις την stripslashes() σε κάθε $_GET variable για να αφαιρέσεις τα slashes.

Επίσης... η μέθοδος σου είναι μεζεδάκι για ένα hacker. Διάβασε για sql injection. Με το να περνάμε sql μέσα από request ανοίγουμε τις πόρτες στα περισσότερα attacks που κυκλοφορούν.

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

προβλημα με quary php mysql

Δημοσίευση από alex_begos » 26 Οκτ 2010 18:00

Σ' ευχαριστώ φιλε μου το ελησα το προβλημα...
να σε ρωτησω κατι για την ασφάλει που μου ανεφερες...
τι ακριβως είναι λάθος στον κωδικα μου?
τι θα πρέπει να αποφέυγώ παραλληλα μελετώ και για sql injection

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

προβλημα με quary php mysql

Δημοσίευση από cpulse » 26 Οκτ 2010 19:51

Αν βρείς πληροφορίες για το sql injection θα καταλάβεις. Πάνω κάτω μέσα σε μια μεταβλητή μπορεί ο χρήστης να περάσει κώδικα και να παράξει ένα sql που είναι εντελώς διαφορετικό από αυτό που περιμένεις. Για αυτό τον λόγο κάθε μεταβλητή που παίρνουμε απο $_GET $_POST $_COOKIE $_REQUEST την φιλτράρουμε με την εντολή mysql_real_escape_string(). Το φιλτράρισμα είναι τέτοιο που μπορείς να το χρησιμοποιήσεις μόνο σε απλές μεταβλητές. Αντί να περάσεις ένα ολόκληρο sql query, πέρασε απλές μεταβλητές.

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

mysql_query&#40;"SELECT field1, field2 FROM table WHERE field3 = '" . mysql_real_escape_string&#40;$_GET&#91;'var_name'&#93;&#41; . "'"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
Αν καταλάβεις καλά τι σημαίνει sql injection μπορείς να περάσεις και sql από το URL με ασφάλεια, αλλά σε κάθε περίπτωση κάτι τέτοιο αποκαλύπτει ευαίσθητες πληροφορίες που δεν χρειάζεται να ξέρει ο χρήστης.

Απάντηση

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

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

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