الوقاية الأمنية لحقن PHP من خلال العملية المذكورة أعلاه، يمكننا فهم مبادئ وأساليب حقن Php، بالطبع، يمكننا أيضًا تطوير طرق الوقاية المقابلة:
الأول هو إعدادات الأمان للخادم، لقد تحدثنا بالفعل عن إعدادات الأمان لخادم Windows من قبل ولن نكررها مرة أخرى. الإعدادات الرئيسية هنا هي إعدادات الأمان الخاصة بـ php+mysql وإعدادات الأمان لمضيف Linux . لمنع حقن php+mysql، قم أولاً بتعيين magic_quotes_gpc على تشغيل وdisplay_errors على إيقاف. إذا كان من نوع معرف، فإننا نستخدم الدالة intval() لتحويله إلى نوع عدد صحيح، كما هو موضح في الكود:
$id=intval($id);
mysql_query = "select *from example Where articieid='$id'"; أو اكتب بهذه الطريقة: mysql_query("SELECT * FROMarticle WHEREarticleid=".intval($id)."")
إذا كان نوع حرف، فاستخدمه addlashes() قم بتصفيتها، ثم قم بتصفية "%" و"_" مثل:
$search=addslashes($search);
$search=str_replace("_"،_"،$search);
$search=str_replace("%"،%"،$search);
بالطبع، يمكنك أيضًا إضافة كود PHP العام لمكافحة الحقن:
/******************************
وصف PHP العام لرمز الأمان المضاد للحقن:
تحديد ما إذا كان المتغير الذي تم تمريره يحتوي على أحرف غير قانونية مثل $_POST، $_GET
وظيفة:
مضاد للحقن
********************************/
// أحرف غير قانونية ليتم تصفيتها
$ArrFiltrate=array("'"،";"،"union");
// عنوان URL الذي سيتم الانتقال إليه بعد حدوث خطأ، إذا لم يتم ملؤه، فسيتم تعيين الصفحة السابقة بشكل افتراضي.
$StrGoUrl="";
// ما إذا كانت هناك قيمة في المصفوفة
الدالة FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate كـ $key=>$value){
إذا (eregi($value,$StrFiltrate)){
عودة صحيحة؛
}
}
عودة كاذبة.
}
// دمج $_POST و $_GET
إذا (function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}آخر{
foreach($HTTP_POST_VARS كـ $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS كـ $key=>$value){
$ArrPostAndGet[]=$value;
}
}
// يبدأ التحقق
foreach($ArrPostAndGet كـ $key=>$value){
إذا (FunStringExist($value,$ArrFiltrate)){
echo "alert(/"موجه Neeao, حرف غير قانوني/");";
إذا (فارغ($StrGoUrl)){
صدى "history.go(-1);";
}آخر{
echo "window.location=/"".$StrGoUrl."/";";
}
مخرج؛
}
}
?>
/******************************
احفظ باسم checkpostandget.php www.devdao.com
ثم قم بإضافة include("checkpostandget.php"); أمام كل ملف PHP.
********************************/
بالإضافة إلى ذلك، يتم تشفير اسم المستخدم وكلمة المرور للمسؤول باستخدام md5، مما يمكن أن يمنع حقن PHP بشكل فعال.
هناك أيضًا بعض الاحتياطات الأمنية التي تحتاج إلى تعزيز على الخادم وmysql.
لإعدادات الأمان لخادم Linux:
لتشفير كلمة المرور، استخدم أداة "/usr/sbin/authconfig" لتشغيل وظيفة تظليل كلمة المرور وتشفير كلمة المرور.
لمنع الوصول إلى الملفات المهمة، أدخل إلى واجهة أوامر Linux وأدخل عند المطالبة:
#chmod 600 /etc/inetd.conf // تغيير سمات الملف إلى 600
#chattr +I /etc/inetd.conf // تأكد من أن مالك الملف هو الجذر
#chattr –I /etc/inetd.conf // تقييد التغييرات على هذا الملف
لمنع أي مستخدم من التغيير إلى المستخدم الجذر من خلال الأمر su، أضف السطرين التاليين في بداية ملف التكوين su، أي الدليل /etc/pam.d/:
مصادقة كافية /lib/security/pam_rootok.so لتصحيح الأخطاء
المصادقة مطلوبة /lib/security/pam_whell.so group=wheel
حذف كافة الحسابات الخاصة
#userdel lp وما إلى ذلك، احذف المستخدم
#groupdel lp، وما إلى ذلك. احذف المجموعة لحظر برامج suid/sgid غير المستخدمة
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;