PHP හි PDO වල විමසුම් ප්රශ්න
ඔබ දැනටමත් දැන සිටිය යුතු පරිදි, SQL විමසුම් SQL ඇතුලුවීම් වලට ගොදුරු වේ. PDO දිගුව ඇතුලුවීම් සමඟ සටන් කිරීමට නිර්මාණය කර ඇත, නමුත් සරලව, පෙරනිමිය ලෙස, එය මෙය කරන්නේ නැත.
අපි උදාහරණයක් මත ගැටලුව දෙස බලමු. අපට පහත විමසුමක් ඇතැයි සිතමු, එහිදී විචල්යයක් ඇතුල් කරනු ලැබේ:
<?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);
?>
නමුත් අපට ලැබුණේ පහත විමසුමයි, එය වෙබ් අඩවියේ පරිපාලකයා ලබා ගනී:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
මෙම තත්වය වළක්වා ගැනීම සඳහා, PDO විශේෂ යාන්ත්රණයක් සපයා ඇත, එය සූදානම් විමසුම් ලෙස හැඳින්වේ. ඒවා අපි ඊළඟ පාඩමේදී සාකච්ඡා කරන්නෙමු.
හිතාමතාම ඔබේ දත්ත ගබඩාවට SQL ඇතුලුවීමක් සිදු කරන්න.