السلام عليكــم ورحمـة الله وبركاتــه
بســم الله الـرحمــن الرحيــم
اخواني الأعزاء..
كلاس الـ dsSafer هو صنف للحمايه من اخطار
- XSS
- SQL INJECTION
- LOCAL FILE INCLUDE
- REMOTE FILE INCLUDE
محتويات الصنف
1) المتغيرات العامه التي يستلزم اعدادها
$dsTags
يحتوي على الوسوم المسموحه، وهو من نوع نص، مثال
<div>, ,<a>
فإن تركتها فارغه.. فهذا يعني انه غير مسموح بأي وسم هتمل..
وان كتبت فقط 'all' فهذا يعني انك ترغب بالسماح بجميع وسوم الهتمل
$dsAttributes
وهو من نوع مصفوفه.. ويحتوي على وسوم الهتمل وخواصها المسموحه، مثال
array( 'img' => 'src,alt', 'a' => 'href' );
فإن تركتها فارغه.. فإن هذا يعني أنك تسمح بجميع الخواص للوسوم المسموحه
$dsQuotes
وهو من نوع الثوابت المعروفه في الphp القيم المسموحه فيه هي:
ENT_COMPAT ENT_QUOTES ENT_NOQUOTES
$dsCharset
وهو متغير نصي، يحتوي على نوع الترميز المستخدم
$dsDBLink
وهو متغير نصي.. يحتوي على اسم المتغير الذي يحتوي على مقبض الاتصال بالقاعده
2) الدوال العامه وعملها:
الداله dsInclude()
وهي داله تقوم بنفس عمل require, require_once, include, include_once
فائدتها انها تقوم بتأكد من ان المستخدم لم يقم بمحاولة تغيير مسار المجلد او الملف المراد استدعائه..
طريقة الاستخدام
$myPath = 'path/to/folder/to/file/';
$dsSafer = dsSafer();
$dsSafer->dsInclude('myPath');الداله dsInput()
هذه الداله تختص بالمدخلات التي قام بادخالها المستخدم سواء عن طريق نموذج او عن طريق الضغط على وصلة في الموقع تحتوي على متغيرات مرسله من قبل صفحه اخرى.
وتحتوي على 7 باراميترات.. 2 منهم هما الاجباريان
الباراميترات الاجباريه
$dsStr وهو النص المراد تأمينه.. سواء كان نص او متغير يحتوي على نص
$dsType وهو نوع التأمين المراد عمله على النص.. والانواع المتوفر هي
- str يقوم هذا النوع بتأمين النص من اخطار ال xss دون ال sql inj معتمد في ذلك على الاعدادات السابقه في متغيرات الصنف العامه..
- int يقوم بجل المتغير يحتوي على ارقام فقط.. فهو يأمن المتغير من اخطار ال xss وال sql inj
- float لجعل المتغير من نوع قيمة عشريه
- bool لجعل المتغير من نوع 0 او 1 (true,false)
- array لجعل المتغير من نوع مصفوفه
- sql لتأمين المتغير من اخطار ال xss وال sql ويتم استدعاء هذا النوع فقط للمتغيرات النصيه التي سيتم ادخالها للقاعده.. دون المتغيرات العدديه.. لأن نوع ال int يكفي بالنسبة للمتغيرات العدديه
الباراميترات الاختياريه..
$dsAllowedTags
$dsAllowedAttributes
$dsQuotesStyle
$dsUsedCharset
$dsUsedDBLink
وهم بالضبط مثل المتغيرات العامه للصنف.. والفائده منها.. ان اردت ضبط اعدادات عامه لجميع المتغيرات باستثناء متغير او اكثر فيمكن الاستفاده من هذه المتغيرات.. فكل ما ينطبق على المتغيرات العامه للصنف ينطبق على هذه الباراميترات الاختيارية
الداله dsOutput()
وهي للتعامل مع ماتريد اخراجه للعرض او الطباعه
وتحتوي على 4 باراميترات.. 2 منهم اجبارين
الباراميترات الاجباريه
$dsStr وهو النص المراد اخراجه
$dsType وهو نوع الاخراج المراد عرضه.. والانواع هي
- sql ان كان النص قد تم جلبه من القاعده.. فيجب اولا استدعاء هذا النوع ومن ثم احد الانواع التاليه
- plain لتجريد النص من جميع وسوم الهتمل ومعاملته كنص عادي دون اي علاقه بالهتمل
- html لعرض النص مع تطبيق مايحتويه من وسوم هتمل
- code لعرض النص ووسوم الهتمل على هيئة وسوم مقروءة دون تطبيقها
الباراميترات الاختياريه
$dsQuoteStyle
$dsUsedCharset
وينطبق عليهما ما سبق التكلم عنه في المتغيرات العامه للصنف ولذا الحكمه الموجوده في الداله dsInput()
طريقة الاستخدام
<?php
$dsSafer = dsSafer();
// الاعدادات
$dsSafer->dsCharset = 'UTF-8';
$dsSafer->dsQuotes = ENT_QUOTES;
$dsSafer->dsDBLink = $link; //$link = the connection to mysql
$dsSafer->dsTags = '<br>,<b>,<i>,<p>,<div>,<hr>,<ul>,<ol>,<li>,<img>,<a>'; // 'all' = allow all tags && '' = allow none
$dsSafer->dsAttributes = array('img' => 'src,alt', 'a' => 'href' );
// بدئ عملية الفلترة للمدخلات
$name = $dsSafer->dsInput($_POST['name'], 'str');
$title = $dsSafer->dsInput($_POST['title'], 'str');
echo $name;
echo $title;
// او بطريقة اخرى ان كان لدينا محموعة متغيرات نريد تطبيق عملية الفلترة عليهم بنفس الخواص والقواعد
$dsSafer->dsInput(array('_POST'=>'name,title'), 'str');
echo $name;
echo $title;
// للمخرجات
$newsTitle = 'something'; // تم جلبه من قاعدة البيانات
$newsTitle = $dsSafer->dsOutput($newsTitle,'sql');
$newsTitle = $dsSafer->dsOutput($newsTitle,'html');
echo $newsTitle;
?>لتحميل الصنف: إضغط هنا
اتمنى ان يكون مفيد لكم
واتمنى من ذوي الخبرة التعليق على الكلاس للاستفاده والتطوير
بالتوفيق للجميع



