⊗ppSpPDQu 58 of 83 menu

Vấn đề với truy vấn trong PDO PHP

Như bạn đã biết, các truy vấn SQL dễ bị tấn công SQL injection. Tiện ích mở rộng PDO được tạo ra để chống lại các cuộc tấn công injection, nhưng một cách đơn giản, theo mặc định, nó không làm điều đó.

Hãy xem xét vấn đề qua một ví dụ. Giả sử chúng ta có truy vấn sau, trong đó có chèn một biến:

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

Giả sử biến của chúng ta đến từ đâu đó bên ngoài, ví dụ: từ tham số GET. Để đơn giản, tuy nhiên, hãy chỉ đặt giá trị của nó theo cách thủ công. Chúng ta mong đợi một giá trị số nào đó, ví dụ:

<?php $id = 1; ?>

Tuy nhiên, một hacker độc hại có thể truyền giá trị sau (giả sử chúng ta có trường role):

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

Kết quả là chúng ta muốn có truy vấn sau:

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

Nhưng lại nhận được truy vấn sau, truy xuất quản trị viên trang web:

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

Để tránh tình huống như vậy, PDO cung cấp một cơ chế đặc biệt, được gọi là prepared statements (các truy vấn được chuẩn bị). Chúng ta sẽ phân tích chúng trong bài học tiếp theo.

Cố ý thực hiện một cuộc tấn công SQL injection vào cơ sở dữ liệu của bạn.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối