[دعو للنقاش] ماذا لو اردت ان تخزن اكواد HTML+Javascriptفى قاعدة البيانات دون ان تخترق
بسم الله الرحمن الرحيم
مرحبا باعضاء سوالف الكريم , وخاصة قسم PHP
بحثت عن كثير من المواضيع التى تتحدث عن تخزين اكواد HTML داخل قاعدة البيانات وعن استخدام دالة Preg_match واخواتها
فكرت ايضا فى تشفير الكود قبل ارسالة الى قاعدة البيانات واعادة فكه مرة اخرى
ولكن حتى الان اخشى تماما من ان تتم عمليات اختراق وخاصة SQL Injection
<script type="text/javascript" src="http://cdn.widgetserver.com/syndication/subscriber/InsertWidget.js"></script><script type="text/javascript">if (WIDGETBOX) WIDGETBOX.renderWidget('7bf79bbd-c63c-43c9-aa94-dfda74c77127');</script><noscript>Get the <a href="http://www.widgetbox.com/widget/youtube-videos">YouTube Videos</a> widget and many other <a href="http://www.widgetbox.com/">great free widgets</a> at <a href="http://www.widgetbox.com">Widgetbox</a>! Not seeing a widget? (<a href="http://docs.widgetbox.com/using-widgets/installing-widgets/why-cant-i-see-my-widget/">More info</a>)</noscript>
أعتقد ان موضوع وضع اكواد جافا سكريبت عن طريق المستخدم فيها خطر ليس من sql injection ولكن الخطر الاكبر من XSS من الممكن ان يقوم المستخدم بوضع كود يسرق به كوكيز الأدمين او المستخدمين المسجلين
على كل , لوضع كود داخل قاعدة بيانات يتم إستخدام دالة addslashes عند الحفظ بقاعدة البيانات
واستخدام stripslashes عند استرجاع المخزن
أعتقد ان موضوع وضع اكواد جافا سكريبت عن طريق المستخدم فيها خطر ليس من sql injection ولكن الخطر الاكبر من XSS من الممكن ان يقوم المستخدم بوضع كود يسرق به كوكيز الأدمين او المستخدمين المسجلين
على كل , لوضع كود داخل قاعدة بيانات يتم إستخدام دالة addslashes عند الحفظ بقاعدة البيانات
واستخدام stripslashes عند استرجاع المخزن
خالص ودي
جزاك الله كل خير اخوى ahmadmarafa
كلام رائع , ولكن ما رايك لو قمنا بفلترة تلك الاكواد التى تتعامل مع الكوكيز ؟
بكل بساطة يمكنك بناء نظام BBCode ضخم قليلاً و يمكنك تضمين اكواد الجافا سكريبت فيه و فلترة جميع الدوال المشبوهة او التي تشكل خطر على المستخدم .
مرحبا اخوى وضاء
فكره رائعه .. فكرت بها بالفعل
شوف
الموقع فكرته ان لكل مستخدم صفحة خاصة به
يضع فيها اكواد جافا سكريبت مثل التى ارفقتها بالاعلى كعداد للزوار او widget
مثل هذه http://www.widgetbox.com/widget/youtube-videos
ولكننى لا يمكننى حصر كل تلك الاكواد
لذلك افكر فى فلترة الاكواد الخبيثه فحسب
مرحبا اخوى وضاء
فكره رائعه .. فكرت بها بالفعل
شوف
الموقع فكرته ان لكل مستخدم صفحة خاصة به
يضع فيها اكواد جافا سكريبت مثل التى ارفقتها بالاعلى كعداد للزوار او widget
مثل هذه http://www.widgetbox.com/widget/youtube-videos
ولكننى لا يمكننى حصر كل تلك الاكواد
لذلك افكر فى فلترة الاكواد الخبيثه فحسب
وجزاك الله كل خير
حياك الله و بياك .
لا تحتاج فلترة الاكواد كاملة فلا يمكنك حصرها لان لكل مبرمج طريقة كتابته للكود و يمكنه ان يلعب على اللفترة .. انما المعول عليه فلترة الدوال فقط مثلا دوال الكوكيز و اي دوال تتعامل مع متصفح الزائر حتى تكسب ثقة الزائر .
حياك الله و بياك .
لا تحتاج فلترة الاكواد كاملة فلا يمكنك حصرها لان لكل مبرمج طريقة كتابته للكود و يمكنه ان يلعب على اللفترة .. انما المعول عليه فلترة الدوال فقط مثلا دوال الكوكيز و اي دوال تتعامل مع متصفح الزائر حتى تكسب ثقة الزائر .
ممتاز
مارايك فى الكود التالى
كود PHP:
<?php function RemoveXSS($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed // this prevents some character re-spacing such as <java\0script> // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
// straight replacements, the user should never need these since they're normal characters // this prevents like <IMG SRC=@avascript:alert('XSS')> $search = 'abcdefghijklmnopqrstuvwxyz'; $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $search .= '1234567890!@#$%^&*()'; $search .= '~`";:?+/={}[]-_|\'\\'; for ($i = 0; $i < strlen($search); $i++) { // ;? matches the ;, which is optional // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ; // @ @ 0{0,7} matches '0' zero to seven times $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; }
وعادة ايضا اقوم بالتاكد ان كنت ساقوم بارسال مثلا ID
بتأكد بدالة IS_Numreic
كود PHP:
if(!is_numeric($id)){ echo"BAD ID";
}else{ //My Cosde here !! }
حتى أريحك ، لن تجد شيء يفيدك في اختبار الكود لا خبير و لا مبرمج اكثر من التطبيق العملي ، ادخل على مواقع الثغرات العالمية كموقع ميلوورم الذي تم غلقه و ظهرت عدت بدائل كموقع http://www.exploit-db.com/ و خذ لك عينات من الاكواد الخبية و جربها على صفحاتك الشخصية طبعا بعد ان تنقحها من روابط المواقع الاخرى و البريد الالكتروني و راجع فاعلية الحماية لديك.
طيب بس تطلع الكود من قاعدة البيانات حط الكود في textarea
واطبعه، واتوقع هذا يلغي امكانية ال XSS
حسبما اعلم دالة html_entities تحول طريقة كتابة التاغات بحيث لا يتم تنفيذها
طيب بس تطلع الكود من قاعدة البيانات حط الكود في textarea
واطبعه، واتوقع هذا يلغي امكانية ال XSS
حسبما اعلم دالة html_entities تحول طريقة كتابة التاغات بحيث لا يتم تنفيذها
حتى أريحك ، لن تجد شيء يفيدك في اختبار الكود لا خبير و لا مبرمج اكثر من التطبيق العملي ، ادخل على مواقع الثغرات العالمية كموقع ميلوورم الذي تم غلقه و ظهرت عدت بدائل كموقع http://www.exploit-db.com/ و خذ لك عينات من الاكواد الخبية و جربها على صفحاتك الشخصية طبعا بعد ان تنقحها من روابط المواقع الاخرى و البريد الالكتروني و راجع فاعلية الحماية لديك.
فكره مناسبة للغاية
جزاك الله كل خير اخوى وضاء
إقتباس:
المشاركة الأصلية بواسطة ahmadmarafa
هناك حل , وهو عن طريق البرمجة في موقع مستقل عن الموقع الخاص بك وتضمين الخدمة بواسطة Iframe
شاهد نظام igoogle
تحياتي
شكرا ahmadmarafa لاهتمامك ولكن الاخ أحمد العبد الله له رأى اخر
إقتباس:
المشاركة الأصلية بواسطة أحمد العبد الله
حل متطرف
طيب ما هو ممكن يحط الكود ب iframe ويكون الكود مخزن في موقعه كمان
لكن اعتقد وضعه في مربع نصي يفي بالغرض
لأنه لا يتم تنفيذه ابدًا انما يؤخذ كنص
طبعًا ممكن تنسيق المربع النصي كما نشاء بال css
بالنسبة للمربع النصى
انا اريد ان اعرض الكود
كما اشرت مسبقا فى الموضوع
انه رايح يجيب اكواد ويحطها فى الموقع .. انا قاصد هالشى
بس ابى احذف منه الاكواد ان وضع اكواد خبيثه
وشكرا للجميع