لفحص اذا كان من المتصفح ام من السيرفر
ننشئ ملف html عادي على جهازنا ونرسل له متغير GET
محتوى ملف الهتمل هو كود جافاسكربت يطبع الرابط
<script>
alert(location.href);
</script>
ينتج التالي:
file:///C:/Users/ahmad/Desktop/aa.html?msg=it%27sgood
ماذا يفعل المتصفح للرابط؟
يعمل urlencode للعلامات غير الرقم-حرفية
من اين السلاش اذًا؟
ربما من السيرفر من خاصية magic qoutes
وهي "ستذهب" من الاصدارات القادمة
http://php.net/manual/en/security.magicquotes.php
منطقيًا سؤالك جيد
قبل ان نعمل addslashes نسأل إذا كانت هذه القيمة مفعلة
إذا نعم، لا نعمل اسكيب
إذا لا نعمل اسكيب
http://php.net/manual/en/function.ge...quotes-gpc.php
حل قوي جدًا لثغرات ال sql injection:
ال static binding
يعني نبني الاستعلام في البداية دون وضع قيم فيه
بعد ذلك نضيف المتغيرات بدوال اخرى
ولكن هنا ال php تعلم ان هذه القيم هي لمتغيرات وليس لها علاقة بمبنى الاستعلامات
اي انها قيم ثابتة -scalars
هذه الامور موجودة في مكتبة PDO
كود PHP:
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
هذه الخاصية موجودة في الجافا والدوت نيت بشكل افتراضي
وعادة ما تؤخذ كدليل على سهولة لغة ال php بالنسبة لها
إذ ان الاستعلام في ال php بسطر واحد
بينما في هذه اللغات بعدة سطور=> ينتج ان ال php افضل
لكن في الحقيقة ، إذا عملنا نفس الامور، فإن عدد السطور سيكون متساو ٍ تقريبًا