البرمجة الآمنة في لغة CrossSite Scripting … PHP
مدرج تحت قسم: دروس
لقد تعرفنا بعض انواع الثغرات في المقدمة. والآن سوف نقوم بشرح هذه الآنواع بشكل مبسط وهذه الدروس للمبرمجين موجه و ليس للمخترقين، لماذا؟
- لأنه لن اتعمق بطرق الاستغلال و الاكواد الخبيثه لعمل الاستغلالات.
- الدروس سوف تقتصر على الاكواد البرمجية ( التي يفهمها مبرمجين الـ PHP ) وبعض الشروحات البسيطه.
CrossSite Scripting واختصارها XSS، وهو هجوم خطير جدا ( في حالات معينة ) لدرجة:
- يسمح للمهاجم بسرقة Cookies التي تحتوي على كلمات مرور و غيرها.
- يسمح للمهاجم بسرقة Visa Cards و غيره من البيانات الخطره.
- و مدى الخطوره حسب الموقع المصاب مثلاً لو كان الموقع المصاب هو Hotmail. فتخيل بدخولك رابط معين سوف تفقد البريد الالكتروني الخاص بك.
الخطوره هذه على المستخدم و ليس على السيرفر.
طريقة عمل هذه الثغرات كالتالي.
زرع كود JavaScript خبيث بين السطور التي سوف تعرض على شكل HTML ليتم تطبيق هذا الكود الخبيث. مثلاً هناك وصلة تسحبك خبر معين، وتاتي بعنوان الخبر عن طريق الـ $_GET، كود:
echo "<a href='http://www.site.com/news.php?id=".$_GET['id']."> News </a>";
الوصله تكون هكذا للملف:
http://127.0.0.1/xss.php?id=1
ويكون الكود المصدري للصفحه HTML هكذا:
<a href='http://www.site.com/news.php?id=1'> News </a>
لكن لاحظ مذا يحدث لو كانت الوصله هكذا:
http://127.0.0.1/xss.php?id=1'; OnMouseOver='alert(1)';
يكون الكود المصدري للصفحه مريع:
<a href='http://www.site.com/news.php?id=1' OnMouseOver='alert(1);'> News </a>
وعند مرور Mouse على الوصله تظهر رساله تحتوي على الرقم 1.
هذا مثال بسيط على هجوم XSS، وطريقة ترقيع هذه الثغره بالكود الموجود في الاعلى هو استعمال الدالة intval() التي تعيد القيمة الرقمية للمتغير.
echo "<a href='http://www.site.com/news.php?id=".intval($_GET['id'])."'> News </a>";
ونقول احذروا من الوقوع في نفس هذا الخطأ.
وهناك طرق آخرى للهجوم عن طريق XSS فتخيل انك تتعامل مع متغيرات نصيه وليست ارقام، لا تستطيع استعمال الدالة intval() مع هذه المتغيرات.
هناك حل بسيط هو بعض الدوال المتوفرة في لغة برمجة الـ PHP مثل htmlspecialchars.
وهناك بعض الدوال التي يجب عليك كتابتها بمساعدة المعاير القياسية التي تتاكد من عدم مرور بعض الاوامر الخطره JavaScripts Actions لها، و سوف نكتب بعض هذه الدوال الآن.
// Devil-00 REGUnXSS PHP Function
function RegUnXSS($text){
if(preg_match('/OnMouseOver=/i',$text)){
echo 'XSS Stop ';
exit();
}elseif(preg_match('/OnMouseClick=/i',$text)){
echo 'XSS Stop !';
exit();
}
}
هذه دالة فقط تريك طريقة التعامل مع المتغيرات النصية، حيث ان وجدت الجملة OnMouseOver= بالجملة توقف عمل البرنامج. وإليك الكود التالي لتجربة عمل الدالة:
// Devil-00 REGUnXSS PHP Function
function RegUnXSS($text){
if(preg_match('/OnMouseOver=/i',$text)){
echo "XSS Stop !";
exit();
}elseif(preg_match('/OnMouseClick=/i',$text)){
echo "XSS Stop !";
exit();
}
}
echo "<a href='http://www.site.com/news.php?id=".RegUnXSS($_GET['id'])."'> News </a>";
لا توقف جميع XSS فقط مع OnMouseOver & OnMouseClick Actions، لنبين الطريقة اكتب دالتك الخاصة.


هلا أبراهيم
دائما اكثر من رائع
و في طريقة اخرى لمنع هجوم ال xss و اي هجوم زي الأنجكشن
< ?php
$danger = array("union","<script>",onMouserOver");
if (in_array($text,$xss)){
print "XSS Detected":
{
?>
تمام عليك يا ماكنتوش .. نورت حبيبي ..
نعم هناك عدة طرق لاكن افضل الـ Regex لانها عمليه لاكن صعبه شوي :P