Check url var

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

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

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 13:22

'Εχουμε ένα λινκ:

lalakis.php?mid=3

Αφού κάνουμε ποστ τα δεδομένα μέσω ajax φτάνουμε στο Php αρχείο:

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


$mid = $_POST['id'];

	// An to article id pou irthe meso jquery den iparxei stin vasi tote na min kaneis tipota
	$sql = mysql_query("SELECT * FROM easycms_menu WHERE menu_id = '$mid'",$db);
	$rs = mysql_num_rows($sql);
	
while (true) {
    if ($rs != 1 || ctype_digit(strval($mid) === FALSE)) {
    	$return['error'] = true;
    	$return['msg'] = 'Μήνυμα: Υπάρχει πρόβλημα με το ID του Menu!';
    	break;
    }

Αν πάω στο Url και πειράξω το mid και το κάνω p.x 3a η συνθήκη δεν δουλεύει. Σε οποιαδήποτε άλλη περίπτωση είτε γράψω γράμματα είτε γραματα και μετά αριθμούς ή μόνο άσχετους αριθμούς που δεν υπάρχουν στην βάση τότε όλα βαίνουν καλώς σύμφωνα με τον έλεγχο.

έχω προσπαθήσει και την is_numeric αλλά ούτε αυτή αντιμετωπίζει π.χ το 1e3
'Εφαγα το Php manual αλλά δεν έχω βρει λύση. Ισως να γίνεται με Preg_match αλλά σίγουρα μπορώ να χρησιμοποιήσω κάποιες απο τις συναρτήσεις της php όπως ctype_digit , is_int or is_numeric με κάποιο συνδηασμό.!

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

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Check url var

Δημοσίευση από korgr » 28 Μάιος 2010 13:41

Βασικα δεν καταλαβα γιατι δεν σου κανει κατι απλο οπως:

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

$mid =(int)$_POST['id'];

   // An to article id pou irthe meso jquery den iparxei stin vasi tote na min kaneis tipota
   $sql = mysql_query("SELECT * FROM easycms_menu WHERE menu_id = '$mid'",$db);
   if(!mysql_num_rows($sql)){
       $return['error'] = true;
       $return['msg'] = 'Μήνυμα: Υπάρχει πρόβλημα με το ID του Menu!';
    }
 

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Check url var

Δημοσίευση από nbc » 28 Μάιος 2010 13:47

Κατ αρχάς, όπως το έχεις είναι ταμάμ για sql injection. :D

Κατά δεύτερο λόγο, δεν μας γράφεις ποιο είναι το ζητούμενο? Αν θέλεις να δέχεσαι μόνο integers στο $mid, τότε ένα απλό

$mid = $_POST['id']+0;

είναι αρκετό (γλυτώνεις και το injection).

Δεν καταλαβαίνω τι προσπαθείς να κάνεις με το while, το ctype_digit και τη strval...


Edit: sorry, ο korgr είναι πιο γρήγορος...

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 14:04

Βασικά βλέπω παραδείγματα στο php.net και πειραματίζομαι.

1. Δεν με απασχολεί το sql injection τόσο πολύ γιατί το admin area θα είναι Protected. Εκτός αν αυτός που θα το χρησιμοποιεί θέλει να βγάλει τα μάτια μόνος του :D

Πειραματίστικα και με αυτά που αναφέρατε από το πρωί αλλά αυτό που ψάχνω δεν νομίζω να λύνεται.

http://www.datalabs.ws/easycms/administ ... menu&mid=3

χωρίς να κάνετε διαγραφή προσπαθήστε στο url να κάνετε το Mid 3a πατήστε enter και ξανά submit και δείτε ότι δεν υπακούει στον έλεγχο.

Nbc: μην ψαρώνεις με το while είναι κομμάτι που ελέγχω τα errors και τα επιστρέφω με ajax.

Αφού λοιπόν δέχομαι μόνο Ints τότε ψάχνω να βρω τρόπο όταν ο άλλος βάλει 3+chars να του πετάξω πάλι error.

Ελπίζω να έγινα κατανοητός. :)
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Check url var

Δημοσίευση από nbc » 28 Μάιος 2010 14:14

Όχι δεν έγινες κατανοητός. Τέλος πάντων, το μυαλό μου δεν φτάνει μέχρι εκεί... :D

Ή το Url σου σχηματίζεται από σένα, και άρα θα είναι ok, ή κάποιος το σκαλίζει και άρα δεν θα είναι ok. Αν δεν είναι ok, τι σημασία έχει αν είναι 3a ή a3? Και γιατί δηλαδή πρέπει το ένα να απαντηθεί και το άλλο όχι? Η βάση δίνει μενου? αν ναι, όλα Ok, αν όχι τότε error.

Τες πα...

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 15:35

Απλά έψαχνα να βρω πως θα ελέγχω αν το string που μου έρχεται αν είναι αριθμητικό ή αλφαρηθμητικό.

Θα μείνω σε αυτό που προτείνατε και εσύ και ο νότης.

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

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Check url var

Δημοσίευση από korgr » 28 Μάιος 2010 15:48

Δοκιμασες το

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

 if ($rs != 1 || ctype_digit(strval($mid) === FALSE)) { 
να το κανεις ετσι;

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

 if (!$rs || ctype_digit(strval($mid) === FALSE)) { 

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 15:56

Ναι δεν παίζει θα μείνω στο

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

$mid = $_POST['kati']+0;

	$sql = mysql_query("SELECT * FROM easycms_menu WHERE menu_id = '$mid'",$db);
	$rs = mysql_num_rows($sql);

if ($rs != 1) {	


Γρήγορο και λειτουργικό. Ας πάει ο άλλος να κοτσάρει ότι θέλει στο url.

Αν βάλει α3 τότε η $mid γίνεται 0 άρα το select δεν θα επιστρέψει τίποτα.
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Check url var

Δημοσίευση από nbc » 28 Μάιος 2010 16:12

vcore έγραψε:Απλά έψαχνα να βρω πως θα ελέγχω αν το string που μου έρχεται αν είναι αριθμητικό ή αλφαρηθμητικό.
Οκ, τώρα είσαι κατανοητός. Aυτό είναι άλλο ζητούμενο.

Θα μπορούσες να κάνεις το εξής:

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

$mid = $_POST['id']; 

if (!empty() && !preg_match('~^[1-9][0-9]*$~', $mid))
{
    $System::log_hack_attempt(__FILE__, __LINE__);
}

$mid += 0;

...

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 16:18

Μάλιστα....
Σε ευχαριστώ :)

Υπάρχει error στην γραμμή

if (!empty() && !preg_match('~^[1-9][0-9]*$~', $mid))

το δοκίμασες καθόλου?

Parse error: syntax error, unexpected ')', expecting T_STRING or T_VARIABLE or '$' in /home/datalabs.ws/www/easycms/administrator/testing.php on line 15
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Check url var

Δημοσίευση από nbc » 28 Μάιος 2010 16:19

Εμ βέβαια, αφού λείπει η μεταβλητή από το empty() :D

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Check url var

Δημοσίευση από dimsis » 28 Μάιος 2010 16:20

http://php.net/manual/en/function.is-numeric.php
με την is_numeric δεν παίζει; (ή http://www.php.net/manual/en/function.is-int.php αν μιλάμε μόνο για integer) ή και με το (int) που έγραψε και ο Νότης; Δεν μπορείς δηλαδή να το ελέγξεις και αναλόγως να πράξεις;

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Check url var

Δημοσίευση από nbc » 28 Μάιος 2010 16:25

Όχι δεν γίνεται, στη συγκεκριμένη περίπτωση. Η is_int() ελέγχει αν είναι integer scalar. Η is_numeric() δέχεται και float symbols.

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

Check url var

Δημοσίευση από vcore » 28 Μάιος 2010 16:45

Ακριβώς όπως το είπε και ο nbc.

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

Απάντηση

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

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

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