Προς το περιεχόμενο

PHP Sanitize URL ?


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα,

λοιπόν, σε μια σελίδα μου παρατήρησα ότι αν στη διευθύνση δώσω τον χαρακτήρα % με πετάει στην error σελίδα της εταιρείας host (000webhost συγκεκριμένα) την στιγμή όμως που διαθέτω custom σελίδα για προβολή 404 και λοιπών σφαλμάτων. Ακόμα, η σελίδα δεν δέχεται μεταβλητές ούτε μέσω get ούτε και με post. Απλά πάνω που δοκίμαζα διάφορα πράγματα για να δω αν είμαι οκ απο xss, έβαλα και το % και είδα πως αντί να βγω σε custom error page πήγα στο λινκ του host για σφάλματα.
Παράδειγμα:
Δοκιμή: www.domain.com/aandfnalkdnkl/sds/d/sd/fs/df  ---> custom error page
Δοκιμή: www.domain.com/?<script>alert(1);</script>  ---> φορτώνει ξανά η index.php
Δοκιμή: www.domain.com/%<script>alert(1);</script>  ---> με στέλνει εδώ error404.000webhost.com/?

Αυτό μπορώ να το αντιμετωπίσω με κανονική έκφραση στη μεταβλητή $_SERVER['QUERY_STRING']
για να κόψει όλους τους παράξενους χαρακτήρες ή με συναρτήσεις τύπου htmlspecialchars ;
Ακόμα, αφού by default φορτώνει η index.php τον έλεγχο για το url τον κάνω σε αυτήν, έτσι ;
Κάθε άποψη δεκτή :)
 

 

Δημοσ.

Το % είναι ειδικός χαρακτήρας του url encoding. Μην τον χρησιμοποιείς σε urls για σκοπούς διαφορετικούς από τη σημασία του.

 

Κατά συνέπεια, δεν πρόκειται ποτέ να φτάσει στο QUERY_STRING σου για να τον επεξεργαστείς.

 

Κατά τα άλλα, τα αποτελέσματα των δοκιμών σου είναι απολύτως αναμενόμενα, αν το καλοσκεφτείς.

Δημοσ.

Μάλιστα, δηλαδή δεν υπάρχει κάποιος τρόπος έτσι ώστε αν το url έχει το % ο επισκέπτης να πηγαίνει στη custom error page ;
Πιστεύω πως κάτι μπορεί να γίνει μέσω .htaccess αλλά δεν είμαι σίγουρος.

Δημοσ.

Ο server απαντάει με διαφορετικό status code (πιθανότατα 400 / bad request) όταν του λενε τέτοιες μπούρδες οπότε δεν οδηγείτε ο επισκέπτης σε σελίδα 404, που είναι άλλο response. Αυτό που κάνεις, δεν έχει κανένα νόημα πάντως. το url ή percent encoding χρησιμοποιεί τον συγκεκριμένο χαρακτήρα όπως τα html entities τον & για να κωδικοποιήσουν κάποιους χαρακτήρες.

 

όταν στο url γράφεις tade.com/%< υπάρχει πρόβλημα γιατί ΔΕΝ υπάρχει τέτοιος χαρακτήρας, το % θα γίνει decoded μαζί με τους επόμενους δυο χαρακτήρες και θα βγει κάτι, στη συγκεκριμένη περίπτωση τίποτα οπότε bad request.

 

Αν δεν καταλαβαίνεις πως λειτουργεί η διαδικασία, σκέψου πόσο δύσκολο είναι να φανταστείς πιθανά injection. Αν σε απασχολεί η ασφάλεια, καταρχάς φύγε από free hosting και μετά δούλεψε πάνω στα script που τρέχουν, ο server ξέρει πολύ καλύτερα από εσένα να χειριστεί τέτοια θέματα χωρίς παρεμβολές στο htaccess.

Δημοσ.

Μάλιστα, δηλαδή δεν υπάρχει κάποιος τρόπος έτσι ώστε αν το url έχει το % ο επισκέπτης να πηγαίνει στη custom error page ;

Πιστεύω πως κάτι μπορεί να γίνει μέσω .htaccess αλλά δεν είμαι σίγουρος.

 

Πως θα γίνει μέσω htaccess τη στιγμή που λέμε ότι αυτό δεν έρχεται ποτέ στον server; (εννοώ ότι απορίπτεται λόγω λάθους στη σύνταξη)

 

Αν δεις στο link που σου έδωσα, το % έχει τη δική του κωδικοποίηση (προφανώς, αφού ως είδικός χαρακτήρας θα πρέπει να κωδικοποιηθεί για να χάσει την ειδική του σημασία). Οπότε, αν θέλεις σώνει και καλά να έχεις τέτοιους χαρακτήρες στα url, θα πρέπει να τους αντικαταστήσεις με το encoding τους, που είναι το %25. Για παράδειγμα, το

http://example.com/foo/bar?slice=20%&dice=6faces

θα γινόταν

http://example.com/foo/bar?slice=20%25&dice=6faces

Ο server θα έκανε decode, το %25 θα μεταφραζόταν σε %, και έτσι θα περνούσε στο QUERY_STRING σου.

Problem solved.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...