تابع موضوعات المنتدى الانتساب تعليمات س - ج المفكرة بحث مواضيع اليوم إشارة الأقسام مقروءة

مواقع صديقة: تعلم البي اتش بي - تصميم نت - أفضل استضافة

قديم 18-11-2008, 05:12 AM   #1 (permalink)
عضو جديد
 
تاريخ الانتساب: 01-11-2008
مشاركات: 10
مستوى السمعة : 0
DeaD SouL على طريق التميز و النجاح
Thumbs up [كلاس] dsSafer للحماية من ثغرات ال XSS, SQL Injection, Local File Include

السلام عليكــم ورحمـة الله وبركاتــه

بســم الله الـرحمــن الرحيــم

اخواني الأعزاء..

كلاس الـ dsSafer هو صنف للحمايه من اخطار

  1. XSS
  2. SQL INJECTION
  3. LOCAL FILE INCLUDE
  4. REMOTE FILE INCLUDE


محتويات الصنف
1) المتغيرات العامه التي يستلزم اعدادها
$dsTags
يحتوي على الوسوم المسموحه، وهو من نوع نص، مثال
كود PHP:
<div>,<br>,<a
فإن تركتها فارغه.. فهذا يعني انه غير مسموح بأي وسم هتمل..
وان كتبت فقط 'all' فهذا يعني انك ترغب بالسماح بجميع وسوم الهتمل


$dsAttributes
وهو من نوع مصفوفه.. ويحتوي على وسوم الهتمل وخواصها المسموحه، مثال
كود PHP:
array(
'img' => 'src,alt',
'a' => 'href'
); 
فإن تركتها فارغه.. فإن هذا يعني أنك تسمح بجميع الخواص للوسوم المسموحه


$dsQuotes
وهو من نوع الثوابت المعروفه في الphp القيم المسموحه فيه هي:
كود PHP:
ENT_COMPAT
ENT_QUOTES
ENT_NOQUOTES 
$dsCharset
وهو متغير نصي، يحتوي على نوع الترميز المستخدم


$dsDBLink
وهو متغير نصي.. يحتوي على اسم المتغير الذي يحتوي على مقبض الاتصال بالقاعده



2) الدوال العامه وعملها:

الداله dsInclude()
وهي داله تقوم بنفس عمل require, require_once, include, include_once
فائدتها انها تقوم بتأكد من ان المستخدم لم يقم بمحاولة تغيير مسار المجلد او الملف المراد استدعائه..
طريقة الاستخدام
كود PHP:
$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:
<?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;

?>
لتحميل الصنف بعد التعديل: إضغط هنا

ملاحظة إن كان السطر السابع في الكلاس 0.0.1 أو 0.0.2 قم بالتحميل مرة اخرى من الوصلة الجديده او قم باجراء التعديلات الموجوده في المشاركه 2

اتمنى ان يكون مفيد لكم

واتمنى من ذوي الخبرة التعليق على الكلاس للاستفاده والتطوير


بالتوفيق للجميع

قام بآخر تعديل DeaD SouL يوم 20-11-2008 في 10:00 AM
DeaD SouL غير متصل   رد مع اقتباس
قديم 20-11-2008, 06:44 AM   #2 (permalink)
عضو جديد
 
تاريخ الانتساب: 01-11-2008
مشاركات: 10
مستوى السمعة : 0
DeaD SouL على طريق التميز و النجاح
افتراضي رد : [كلاس] dsSafer للحماية من ثغرات ال XSS, SQL Injection, Local File Include

اعزائي

السطر 124
استبدل هذا
كود PHP:
$$dsVar = (Array_Key_Exists($dsVar,$dsMethod2)) ? $this->dsInuptTreatment($dsMethod2[$dsVar], $dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle) :False
بهذا
كود PHP:
$$dsVar = (Array_Key_Exists($dsVar,$dsMethod2)) ? $this->dsInuptTreatment($dsMethod2[$dsVar], $dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle,$dsUsedCharset,$dsUsedDBLink) :False

السطر 128
استبدل هذا
كود PHP:
$$dsVars = (Array_Key_Exists($dsVars,$dsMethod2)) ? $this->dsInuptTreatment($dsMethod2[$dsVars], $dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle) :False
بهذا
كود PHP:
$$dsVars = (Array_Key_Exists($dsVars,$dsMethod2)) ? $this->dsInuptTreatment($dsMethod2[$dsVars], $dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle,$dsUsedCharset,$dsUsedDBLink) :False

السطر 133
استبدل هذا
كود PHP:
$dsReturn $this->dsInuptTreatment($dsStr$dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle); 
بهذا
كود PHP:
$dsReturn $this->dsInuptTreatment($dsStr$dsType$dsAllowedTags$dsAllowedAttributes$dsQuotesStyle,$dsUsedCharset,$dsUsedDBLink); 

السطر 159
استبدل هذا السطر
كود PHP:
$dsReturn html_entity_decode($dsReturn$dsQuoteStyle$dsUsedCharset); 
بهذا
كود PHP:
$dsReturn html_entity_decode($dsReturn$dsQuotesStyle$dsUsedCharset); 
السطر 162
استبدل هذا
كود PHP:
$dsReturn = ($this->dsMBConvert ? @mb_convert_encoding($dsReturn$this->dsCharset$this->dsCharset) : $dsReturn); 
بهذا
كود PHP:
$dsReturn = ($this->dsMBConvert ? @mb_convert_encoding($dsReturn$dsUsedCharset$dsUsedCharset) : $dsReturn); 
السطر 164
استبدل هذا
كود PHP:
$dsReturn htmlentities($dsReturn$this->dsQuotes$this->dsCharset); 
بهذا
كود PHP:
$dsReturn htmlentities($dsReturn$dsQuotesStyle$dsUsedCharset); 
السطر 187
استبدل هذا
كود PHP:
$dsReturn html_entity_decode($dsReturn$dsQuoteStyle$dsUsedCharset); 
بهذا
كود PHP:
$dsReturn html_entity_decode($dsReturn$dsQuotesStyle$dsUsedCharset); 
السطر 190
استبدل هذا
كود PHP:
$dsReturn = ($this->dsMBConvert ? @mb_convert_encoding($dsReturn$this->dsCharset$this->dsCharset) : $dsReturn); 
بهذا
كود PHP:
$dsReturn = ($this->dsMBConvert ? @mb_convert_encoding($dsReturn$dsUsedCharset$dsUsedCharset) : $dsReturn); 
السطر 194
استبدل هذا
كود PHP:
$dsReturn2 = @MySQL_Real_Escape_String($dsReturn,$this->dsDBLink); 
بهذا
كود PHP:
$dsReturn2 = @MySQL_Real_Escape_String($dsReturn,$dsUsedDBLink); 
السطر 200
استبدل هذا
كود PHP:
$dsReturn htmlentities($dsReturn$this->dsQuotes,$this->dsCharset); 
بهذا
كود PHP:
$dsReturn htmlentities($dsReturn$dsQuotesStyle,$dsUsedCharset); 
السطر 244
استبدل هذا
كود PHP:
$dsReturn htmlentities($dsReturn$this->dsQuotes,$this->dsCharset); 
بهذا
كود PHP:
$dsReturn htmlentities($dsReturn$dsQuoteStyle,$dsUsedCharset); 
السطر 281
استبدل هذا
كود PHP:
$text = ($this->dsMagicQuotes == 0) ? $text $this->dsStripSlashes($text); 
بهذا
كود PHP:
$text $this->dsStripSlashes($text); 
بالتوفيق

قام بآخر تعديل DeaD SouL يوم 20-11-2008 في 09:54 AM
DeaD SouL غير متصل   رد مع اقتباس
إضافة رد

علامات
class, local file inculde, remote file include, sql injection, XSS


زوار هذا الموضوع الآن : 1 (0 عضو و 1 ضيف)
 

(View-All Members who have read this thread : 13
مبرمج اليمن, ميت احساس, aladawi, DeaD SouL, M.B.O, miiax6, milan07, mkh117, rami23, the_unknown, عاشق الاحزان, عبدالقادر الخوار, zaid aliraqi
أدوات الموضوع
طريقة العرض
عادي عادي

ضوابط المشاركة
غير مصرّح لك بنشر موضوع جديد
غير مصرّح لك بنشر ردود
غير مصرّح لك برفع مرفقات
غير مصرّح لك بتعديل مشاركاتك

وسوم vB : نشيط
كود [IMG] : نشيط
كود هتمل : خامل
Trackbacks are نشيط
Pingbacks are نشيط
Refbacks are نشيط

الانتقال السريع

مواضيع ذات صلة
الموضوع الكاتب المجلس المشاركات المشاركة الأخيرة
ماهي sql injection attack amr_5545 مشاكل وحلول PHP Errors & Troubleshooting 6 19-10-2008 01:54 PM
أريد تعلم فلترة البيانات الدخلة إلى الموقع بحيث لاحدث ثغرات في الموقع amr_5545 مشاكل وحلول PHP Errors & Troubleshooting 6 19-10-2008 01:53 PM
اريد داله تاخذ من file/1.ram فقط كلمة file q84q8y مشاكل وحلول PHP Errors & Troubleshooting 3 04-10-2008 12:35 PM
[دالة] تأمين النص من اخطار XSS و SQL INJECTION coder دوال خاصة 18 27-04-2008 09:11 PM


يمنع نقل أي من موضوعات المنتدى دون إذن كتابي مسبق من إدارة المنتدى، مع الشكر.
التوقيت حسب جرينتش +3. الساعة الآن 01:20 AM.