الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تجعل موقعك محمي من جميع التغرات

بدأه sghirziane في 10 يونيو 2011 · 12 رد · 1,874 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المرجو من الاخوان شرح مختلف طرق الحماية في php & mysql

ولكم جزيل الشكر :huh:

#2

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

الإجابة المختصرة على هذا السؤال لا يمكن ذلك 100%، الإجابة المفصلة له لايمكن ذلك أنه كل ما كبر تطبيقك زاد إحتمال لإصابته بالثغرات، لأنه عادة المبرمج يهمل هذا الجانب(في حالة المبتدئين) أو لا ينتبه له. خذ مثالا على سكربتات كبيرة مثل Joomla, VB و غيرها، رغم أنه يوجد لديهم فريق أمني يتحقق من الثغرات إلا أنه دائما نسمع بوجود ثغرة في مثل هذه السكريبتات.

اقتباس
المرجو من الاخوان شرح مختلف طرق الحماية في php & mysql

إن كانت هذه بدايتك في كتابة تطبيقات PHP&MySQL فلا تزعج نفسك بتعلم كل شيء في مرة واحدة، بل إبدأ بالتدريج XSS، SQL Injection و هكذا، راجع قسم الحماية و الأمن لمعلومات أكثر أو هذا الموقع فهو ما تريد.

1

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#3

أعتقد أن أفضل طريقة هي بمعرفة الهجمات التي تهدد تطبيقات الويب، ومن ثم يمكن للمبرمج أن يفكر بطريقة الحماية منها.

كما ذكر أخي SIFE فمن أكثر الهجمات التي تتعرض لها المواقع هي XSS و SQL injection والأخطر بينهما هي طبعاً SQL injection خاصة في حال كون صلاحية المستخدم المتصل بالقاعدة عالية (root؟ File_privilege'd؟).

OWASP لديها قائمة بأخطر 10 تهديدات أمنية ومن بينها التي تهدد مواقع الويب، لكن هناك بعض الانتقادات لقائمة OWASP واتهامات بأنها "تقليد أعمى" لقائمة SANS.

الفكرة بشكل عام تتمحور حول التالي في تطبيقات الويب:

  1. اعتبر المستخدم عدوّك اللدود حتى تثبت براءته :lol:
  2. كل البيانات التي سترد من المستخدم يجب أن يتم إجراء فلترة مناسبة عليها قبل أن تذهب لتنفيذ ضمن باقي تطبيق الويب. هذا يتضمن التالي (ولا يشمل كل شئ):
    • جميع البارامترات التي ترسل في نماذج من نوع GET

  • جميع البارامترات التي ترسل في نماذج من نوع POST
  • جميع البارامترات المسجلة في Cookies

  • جميع البارامترات التي يمكن للمستخدم التحكم بها في HTTP request كـ $_SERVER['PHP_SELF']
  • محتوى الملفات التي يسمح للمستخدم برفعها

  • امتداد الملفات التي يسمح للمستخدم برفعها (فحص الامتداد أحياناً غير كافي تبعاً للكود المستخدم فقط يكتب المستخدم file_name.php%00.txt ويرفع الملف على أساس أنه ملف نصّي بينما يقوم التطبيق بإهمال كل ما يلي %00 ويصبح الملف على السيرفر file_name.php.. هذا اسمه NULL byte injection وهو أحد أنواع الهجمات :))
  • أمور أخرى لا يسعني تذكرها

[*]هجمات CSRF و Clickjacking تعتمد على فكرة Confused Deputy

هذه my 2 cents فيما يستطيع عقلي استذكاره الآن، رأيي المختصر.. start backtracking، اعرف التهديدات وافهمها وابحث عن الحلول، لأن الحل برمجياً سهل مادمت فهمت نوع الهجوم وكيفية استغلاله.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

سؤال مهم لنا نحن المبتدئين

الا يوجد فنكشن تقي من هذه الهجمات؟ يعني ناخذ ادخالات المستخدم نرسلها للفنكشن لتنقيها من كل الادخالات الضارة

واذا وجدت هل تختلف باختلاف اللغة مع العربي مثلاً او اختلاف الترميز؟

#5

اخي العزيز الغالي ..

بالنسبة لإغلاق الثغرات ..أخي الغالي

هذا الكود أستخدمه لمنع ثغرات اإيميل

 function rems ($input){
 if (get_magic_qoute_gpc()){

 $input=stripslashes($input);
 }
 return mysql_real_escape_string($input);
 }

أخي الغالي إذا كانت القيمة التي يدخلها المستخدم ينبغي أن تكون رقما // يجب أن تسبقها بهذا الدالة

mysql_real_escape_string((int)$hala);

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

1.

هذه تظهر القيمة كما هي

htmlentities($var,ENT_COMPOAT,'UTF-8');

2.

أو هذه تحذف الأوسمة (tags).

strip_tags($var);

3.

امنع المستخدم من ادخال أي سلاشات عن طريق هذا الكود

 stripslashes($var);

الأن أريد أن أمن ع المستخدم من أقحام أوامر sql في شريط العنوان أو في التكست بوكس

عن طريق الإستعلام بهذا الطريقة

$query=sprintf("SELECT * FROM table  WHERE var='%s' AND var1=$s ",mysql_real_escape_string($var),mysql_real_escape_string($var2));
 $query=mysql_query($query);

إذا كنت تريد أن تتعامل مع المجلدات .. هذه من أخطر الأمور التي ممكن أن تستخدم عزيزي ..

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

$dir = "page";
 $files=scandir('$dir');
 unset($files[0],$files[1]);
 if(in_array($_GET['page'], $files)){
 //the code
 }

لحماية الجلسات نضع هذا الكود في رأس الصفحة .

ini_set('session.cookie.httponly',true);
 session_start();
 if($_SESSION['last_ip']===false){
 $_SESSION['last_ip']=$_SERVER['REMOTE_ADDR'];
 }
 if($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR'];){
 session_unset();
 session_destroy();
 }

تم تعديل هذه المشاركة بواسطة La Martir في 30 أغسطس 2011 في 01:02

1
#6

Nothing Secure %100 even NASA :)

Life is not the amount of breaths you take, it's the moments that take your breath away

#7

أخي العزيز الغالي .. فؤاد عبد الرازق ..

أنا لم أقل بانه يوجد موقع محمي مية بالمية ...

ولكن لنصعب الأمر على المخترقين وتكون مواقعنا كثر حمياة حتى لو بنسبة 80 بالمئة ..

أشكرك

#8
La Martir كتب:

أخي العزيز الغالي .. فؤاد عبد الرازق ..

أنا لم أقل بانه يوجد موقع محمي مية بالمية ...

ولكن لنصعب الأمر على المخترقين وتكون مواقعنا كثر حمياة حتى لو بنسبة 80 بالمئة ..

أشكرك

اكيد صح كلامك سليم انا بس بحب اعمل مدخلات تولع المواضيع شوية علشان الناس نايمة و العيد بقى و انت عارف كل سنة و انتوا طيبين

Life is not the amount of breaths you take, it's the moments that take your breath away

#9

اي واللع معك حق نايم بالعيد ربي يسعدلي قلبك يااراب

لامارتير

#11

أخي الكريم La Martir

ممكن أن تشرح فكرة هذا الكود؟

ini_set('session.cookie.httponly',true);
 session_start();
 if($_SESSION['last_ip']===false){
 $_SESSION['last_ip']=$_SERVER['REMOTE_ADDR'];
 }
 if($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR'];){
 session_unset();
 session_destroy();
 }
#12
ini_set('session.cookie.httponly',true);

الجملة ديه علشان httponly تشتغل و httponly ديه بتساعد فى الحماية من XSS Attacks و طريق عملها بسيطة جدا

ان مفيش اى Client Side Script يقدر يوصل لــ Cookies المعرفة داخل الــ Browser و على فكرة لازم يكون الــ Browser يدعم الــ httponly علشان تشتغل

if($_SESSION['last_ip']===false){
 $_SESSION['last_ip']=$_SERVER['REMOTE_ADDR'];
 }

كود بسيط ولو انه غريب بالنسبالى شوية بالنسبالى

بس الكود بيقول انه فى حال ان $_SESSION['last_ip'] غير معرفة اذن قم بتسجيل الــ $_SESSION['last_ip'] و سجلها بالقيمة $_SERVER['REMOTE_ADDR']

و القيمة $_SERVER['REMOTE_ADDR'] هى IP المستخدم

if($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR'];){
 session_unset();
 session_destroy();
 }

فى حال ان الــ $_SESSION['last_ip'] لا تساوي IP المستخدم

دمر الجلسة او الــ Session

و على الكود يشتغل لازم تشيل الــ Semicolon اللى بين الاقواس ديه

1

Life is not the amount of breaths you take, it's the moments that take your breath away

#13

شكرا لك

+1

مواضيع مشابهة