⊗ppSpPDQu 58 of 83 menu

Προβλήματα ερωτημάτων στο PDO της PHP

Όπως θα πρέπει ήδη να γνωρίζετε, τα SQL ερωτήματα είναι ευάλωτα σε SQL injections. Η επέκταση PDO έχει σχεδιαστεί για να καταπολεμά τα injections, αλλά από μόνη της, από προεπιλογή, δεν το κάνει.

Ας δούμε το πρόβλημα με ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε το ακόλουθο ερώτημα, στο οποίο εισάγεται μια μεταβλητή:

<?php $sql = "SELECT * FROM users WHERE id=$id"; $res = $pdo->query($sql); ?>

Ας υποθέσουμε ότι η μεταβλητή μας προέρχεται από κάπου εξωτερικά, για παράδειγμα, από μια παράμετρο GET. Για απλότητα, ωστόσο, ας ορίσουμε απλώς την τιμή της χειροκίνητα. Αναμένουμε κάποια αριθμητική τιμή, για παράδειγμα, την ακόλουθη:

<?php $id = 1; ?>

Ένας κακόβουλος χάκερ, ωστόσο, μπορεί να μεταδώσει την ακόλουθη τιμή (υποθέτουμε ότι έχουμε ένα πεδίο role):

<?php $id = '-1 OR role="admin"'; ?>

Συνεπώς, εμείς θέλαμε το ακόλουθο ερώτημα:

<?php $sql = "SELECT * FROM users WHERE id=1"; $res = $pdo->query($sql); ?>

Αλλά λάβαμε το ακόλουθο, το οποίο ανακτά τον διαχειριστή του site:

<?php $sql = "SELECT * FROM users WHERE id=-1 OR role="admin""; $res = $pdo->query($sql); ?>

Για να αποφύγουμε μια τέτοια κατάσταση, το PDO προβλέπει έναν ειδικό μηχανισμό, ο οποίος ονομάζεται prepared statements. Αυτά θα τα αναλύσουμε στο επόμενο μάθημα.

Σκόπιμα πραγματοποιήστε μια SQL injection στη βάση δεδομένων σας.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη