recent
أخبار ساخنة

إكتشاف ثغرة html injection و حماية الموقع منها

إكتشاف ثغرة html injection

حماية تطبيقات الويب Protection of web applications

حماية تطبيقات الويب من الهجمات Attack في الآونة الأخيره من هذا القرن اصبح الهاكر الغير أخلاقيون. يحتلون مواقع تعود ملكيتها لأشخاص بغير حق وذلك من تعدد الثغرات داخل الموقع.

وذلك بسبب أخطاء Error يقع بها المبرمج, اليوم سوف نقوم بشرح احدى تلك الثغرات وهي html injection.

سوف نقوم بشرح الثغرة و الكود المتسبب في الثغرة و كيفية إغلاق هذه الثغرة من خلال اكواد php.

 

حماية المواقع المبنية على PHP

عندما نقول php securty فنحن نقصد بها المواقع المبنية على php و هذا الشرح لا ينطبق مع المواقع المبنية. على asp.net و python flask ولا غيرهم من اللغات المستخدمة في برمجة المواقع. لكن عموماً الفكره كلها واحدة لكن تتغير طريقة كتابة كود الفلترة من لغة إلى أخرى.

HTML Injection

تتيح تلك الثغرة على التعامل مع اكواد html الموجوده داخل الموقع و نحن نعلم بأن هيكلة الموقع تكون مبنية. على اكواد html.

حيث يمكن للهكر أن يقوم بتعديل اكواد html داخل web sit و هذا الأمر خطير جداً بالنسبة للمستخدمين.

حيث يمكن للهكر إضافة حقول بيانات جديدة غير الموجودة في الموقع و عندما يقوم المستخدم بإضافة username and password فيتم إرسال هذه البيانات إلى قواعد بيانات أخرى غير الموجودة في الموقع.

تزداد خطورة الأمر عندما يكون في الموقع حقول لإدخال بيانات بطاقة الإئتمان و غيره من الأشياء السرية التي لا يجب أن يعرفه أحد.

كل ذلك يحصل بسبب عدم فلترة البيانات المارة من حقول الإدخال إلى قواعد البيانات في تلك الحالة تكون المسوؤلة عن هذه المشكلة هي php.


كيفية معرفة بأن الموقع مصاب بثغرة html injection

هنا الهاكر يقوم بالتلاعب في البيانات المارة إلى قواعد البيانات من حقول البيانات, مثل حقل البحث "search" ثم يضيف اكواد html داخل مربع البحث.

و يكون بهذه الطريقة داخل مربع البحث <h1>programmer tech </h1> إن ظهر كلمة programmer tech بحجم كبير.

هذا يعني أن الموقع مصاب بثغرة html injection, سوف نأخذ بعض الأمثلة بكتابة كود مصاب و كيف يمكن الحماية وعمل فلترة له.ل

لنقم بكتابة كود مصاب

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="get">
search:<input type="search" name="word" /> <br><br>
<input type="submit" value="search">
</form>
<?php
echo $_GET["word"];
?>
 

في الكود السابق تم إضافة حقل بحث الذي يوجد في أي موقع, ثم تمت إضافة حقل إرسال بيانات في نفس الصفحة.

وهذا من خلال get و تكمن الخطورة هنا, و كما نعرف بأن دالة get تقوم بإظهار المسار بالكامل, و المشكلة لا تكمل بشكل كبير هنا, و سيكون الكود في المتصفح بالشكل

html injection gap


تم طباعة الكلمة بشكل طبيعي لكن لاحظ الرابط هنا, الرابط يبحث عن كلمة programmer tech في دالة الإرسال بإسم word.

و ذلك يعني أن البيانات تمر من خلال دالة GET و كما يعرف الهاكر ايضاً مسار ملف البحث وهو html_web/html_injection.php.

الآن يعرف الهاكر أنه يتعامل مع ملف html_injection.php و هذا هو مكان البحث لكن إلى الآن لن تحدث خطورة بشكل كامل.

وهنا الهاكر يبدأ بالبحث عن ثغرة html injection من خلال إضافة اكواد html داخل مربع البحث, لنرى كيف سيكون الأمر.

injection

لاحظ كيف تغير حجم الكلمة لتصبح بحجم كبير كما تم تحديده في الكود, و هذا ما كان الهاكر يريده بأن يعرف من خلال الوسم h1 أن الكلمة حجمها يزداد.

و لاحظ ايضاً كيف تغير شكل الرابط, الآن تم إرساله إلى مستخدم أو شخص ما بأن الموقع تم نقل ملكيته لموقع programmer tech.

ويجب التسجيل من جديد و ستكون هنا المشكلة, يمكن إضافة أشياء كثيرة, دعونا نمبرمج كود html يحتوي على حقول تسجيل بيانات مثل user name و password.

<body style="background-color: #273746;">
    <div style="color: red; text-align: center;
    border: solid 2px; #000000; margin-top: 10%;
    width: 50%; height: 250px; background-color: #4caf50;
    border-radius: 25px ; margin-left: 25%">
        <h1 style="color: #273746">Login</h1>
        <div style="margin-top: 40px;">
    <input type="text" | placeholder="user name" style="border-radius: 10px; 
    border: 2px solid #273746;"><br><br>
    <input type="password" placeholder="password" style="border-radius: 10px;
    border: 2px solid #273746;"><br><br>
    <input type="submit" value="submit" style="border-radius: 10px;
    border: 2px solid #273746; background-color: #273746; color:red">
    </div>
    </div>
</body>

سأرفق لكم صورة توضح الكود السابق بشكل أفضل
create gui login html

 

لاحظ عند إضافة الكود في مربع البحث في الموقع المصاب ماذا سوف يحدث, سيتغير شكل الموقع بالكامل كما نريد و نشاهد, الآن إنسخ الكود ثم الصقه في مربع البحث

صفحة تسجيل دخول

الآن تم إضافة صفحة تسجيل دخول لآحظ الرابط كيف تغير عند إرسال الرابط إلى شخص ما او مستخدم على الموقع.

سوف يتم إظهار تلك الصفحة بشكل كامل على المتصفح, و كما يمكن إرسال البيانات الذي سيتم إدخالها من قبل المستخدم. إلى مكان يريد الهاكر أن يحتفظ به أو يحفظ بيانات المستخدمين إلى سيرفر وقواعد بيانات اخرى غير الأصلية.


كيف يتم إيقاف ثغرة html injection

الطريقة سهله جداً هي عمل فلتره للبيانات data المارة بين حقول البيانات, و هناك دوال في php متخصصة لهذا الأمر.
 

دالة htmlentities في لغة PHP

تقوم هذه الدالة بعرض محتوى الإدخال على مربع البحث كما هو, لنقوم بتغليف مكان إرسال البيانات و نرى ماذا تفعل هذه الدالة بشكل واضح.
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="get">
search:<input type="search" name="word" /> <br><br>
<input type="submit" value="search">
</form>
<?php
echo htmlentities ($_GET["word"]);
?>

تم اضافة الدالة بهذه الطريقة وتم تغليف البيانات عن طريق الدالة المحددة, و نحن نعرف هنا أن البيانات تمر من خلال GET.

لنجرب كود الإستغلال من جديد و نرى ماذا تغير عند إضافة هذه الدالة لكي تقوم بعمل تغليف على البيانات

صد استغلال html injection

الآن لم يتم تنفيذ الكود و ذلك بسبب htmlentities لأنها قامت بتغليف البيانات, هناك اكثر من دالة للتغليف, htmlentities هي إحداها, لنتعرف على الحماية بشكل اكبر.

 

دالة htmlspecialchars في PHP

هذه الدالة تقوم بنفس عمل htmlentities لا يختلف الأمر بينهم و يمكنك إضافة هذه او تلك,لكن توجد دوال اخرى افضل من هذه.

دالة strip_tags في لغة PHP

وظيفية هذه الدالة هي مسح اكواد html بشكل نهائي و سيتم ظهور اكواد الإستغلال بعد إضافة هذه الدالة مكان دالة htmlentities.

لآحظ قامت الدالة بحذف جميع اكواد html و هذا افضل حل و يكون الهاكر هنا ليس سعيد الحظ,لكن لآحظ لم يتغير الرابط, مثال ظاهر للهكر و هذا خطأ ايضاً و يجب إرسال البيانات و إستقبالها من خلال POST و ليس GET, لنرسل ونستقبل البيانات من خلال POST.

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
search:<input type="search" name="word" /> <br><br>
<input type="submit" value="search">
</form>
<?php
echo strip_tags ($_POST["word"]);
?>

ماهي مهمة دالة POST الموجودة في لغة PHP

مسؤوله عن عدم طبع المسار في الرابط حتى لا يعرف الهاكر في أي ملف يوجد او يبحث, نلاحظ عند الإستغلال

POST php

الآن كل شي جيد لكن هذا النوع من الثغرات قديم و اظن لا يقع في هذه المشكلة سوى مبرمج جديد و مبتدأ أو كان نائم اثناء بناء الكود.

فيديو شرح الدرس بالكامل
google-playkhamsatmostaqltradent