การป้องกันความปลอดภัยของการฉีด Php ด้วยกระบวนการข้างต้น เราสามารถเข้าใจหลักการและวิธีการของการฉีด Php ได้ แน่นอนว่าเรายังสามารถพัฒนาวิธีการป้องกันที่เกี่ยวข้องได้:
อย่างแรกคือการตั้งค่าความปลอดภัยของเซิร์ฟเวอร์ เราได้พูดคุยเกี่ยวกับการตั้งค่าความปลอดภัยของเซิร์ฟเวอร์ windows ไปแล้วและจะไม่ทำซ้ำอีก การตั้งค่าหลักที่นี่คือการตั้งค่าความปลอดภัยของ php+mysql และการตั้งค่าความปลอดภัยของโฮสต์ Linux . เพื่อป้องกันการแทรก php+mysql ขั้นแรกให้ตั้งค่า magic_quotes_gpc เป็น On และ display_errors เป็น Off หากเป็นประเภท ID เราจะใช้ฟังก์ชัน intval() เพื่อแปลงเป็นประเภทจำนวนเต็ม ดังที่แสดงในโค้ด:
$id=intval($id);
mysql_query="select *from example when articieid='$id'"; หรือเขียนดังนี้: mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")
หากเป็นประเภทอักขระ ให้ใช้ addslashes() กรองแล้วกรอง "%" และ "_" เช่น:
$search=addslashes($ค้นหา);
$search=str_replace(“_”,”_”,$ค้นหา);
$search=str_replace(“%”,”%”,$ค้นหา);
แน่นอน คุณสามารถเพิ่มโค้ดต่อต้านการฉีดทั่วไปของ PHP ได้:
-
คำอธิบายรหัสความปลอดภัยการป้องกันการฉีดทั่วไปของ PHP:
ตรวจสอบว่าตัวแปรที่ส่งผ่านมีอักขระที่ไม่ถูกต้อง เช่น $_POST, $_GET หรือไม่
การทำงาน:
ป้องกันการฉีด
-
//อักขระที่ผิดกฎหมายที่ต้องกรอง
$ArrFiltrate=array("'",";","union");
//URL ที่จะข้ามไปหลังจากเกิดข้อผิดพลาด หากไม่ได้กรอก หน้าก่อนหน้าจะเป็นค่าเริ่มต้น
$StrGoUrl="";
//ไม่ว่าจะมีค่าอยู่ในอาร์เรย์หรือไม่
ฟังก์ชั่น FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate เป็น $key=>$value){
ถ้า (เอเรกี($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 prompt, ตัวละครผิดกฎหมาย/");";
ถ้า (ว่าง($StrGoUrl)){
echo "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 {} ;