รักษาความปลอดภัยรหัส PHP ของคุณ
- มันเป็นสิ่งสำคัญเพื่อให้มั่นใจว่าข้อมูลที่ปลอดภัยจากผู้ใช้ (แบบฟอร์มและ URL อื่น ๆ ) นอกเหนือจากเซิร์ฟเวอร์ OS และเซิร์ฟเวอร์ http ส่วนใหญ่เป็นเพราะการโจมตีเว็บ
- มี 3 หมวดหมู่เพื่อรักษาความปลอดภัยรหัส PHP ของคุณ:
ตรวจสอบผู้ใช้ข้อมูล
เมื่อไซต์มีแบบฟอร์มที่อนุญาตให้ผู้ใช้จับและส่งเนื้อหาสิ่งนี้ไม่เพียงพอที่จะระบุรูปแบบของรายการ (ที่อยู่อีเมลหมายเลขโทรศัพท์ปริมาณผลิตภัณฑ์) เซิร์ฟเวอร์ควรได้รับการตรวจสอบ (เช่น PHP) หากมีข้อมูล ตามความคาดหวังของเรา พิจารณาตัวเลขทั้งหมดแล้วแปลงข้อมูลทั้งหมดที่ส่งโดยผู้ใช้:
ตรวจสอบข้อมูลจาก URL หรือแบบฟอร์ม
ข้อมูลเกือบทั้งหมดที่ได้รับมาจาก URL หรือแบบฟอร์มที่ผู้ดูแลเว็บได้ตั้งไว้ พารามิเตอร์การแสดงผล URL เกือบทั้งหมดระบุด้านล่าง:
/index.php?rub=25
อย่างไรก็ตามพารามิเตอร์นี้ไม่ควรแก้ไข แต่นี่เป็นไปได้ดังต่อไปนี้:
/index.php?rub=0 /index.php?rub= /index.php?rub=aaaaAAAAAAaaaa /index.php?rub=1+or+1
- มันเป็นสิ่งสำคัญที่จะตรวจสอบว่ารูปแบบที่ได้รับผ่าน URL หรือรูปแบบที่คาดว่าจะเป็นประเภทข้อมูล
- คุณสามารถใช้ฟังก์ชัน filter_input () เพื่อตรวจสอบสิ่งเดียวกันได้
- ตัวอย่างเช่นหากคุณได้รับอีเมลจากผู้ใช้จากโพสต์รูปแบบที่มีชื่อฟิลด์เป็นอีเมล คุณสามารถกู้คืนได้โดย:
$ email = filter_input (INPUT_POST, 'อีเมล', FILTER_VALIDATE_EMAIL); ถ้า ($ email) {// รายการที่อยู่อีเมลเป็นรูปแบบที่อยู่อีเมลจริง ๆ }
ฟังก์ชั่นนี้สามารถกรองหลายสิ่ง: ที่อยู่ IP, URL ฯลฯ อาจมีการปรับเปลี่ยนเช่นสตริงการเข้ารหัสก่อนที่จะส่งผ่าน URL เป็นกระบวนการโดย htmlentities ()
- สามารถใช้ตัวกรองหลายตัวร่วมกันโดยใช้ "|" .
- หากต้องการตรวจสอบที่อยู่ IP ภายใต้รูปแบบ Ipv4:
$ ip = filter_input (INPUT_GET, 'ip', FILTER_VALIDATE_IP | FILTER_FLAG_IPV4);
คลิกที่ลิงค์ต่อไปนี้สำหรับตัวกรอง:
//www.php.net/filter
ข้ามเนื้อหาที่แสดงของ URL
เมื่อเนื้อหาที่ป้อนโดยผู้ใช้จะปรากฏบนหน้าจอมันมี HTML หรือรหัส JavaScript ซึ่งทำให้การป้องกันภาคบังคับ
หากเนื้อหาที่จะแสดงใน html: คุณต้อง HTML เข้ารหัสการตั้งค่าเพื่อแปลงอักขระทั้งหมดในเอนทิตี HTML ที่เทียบเท่า ด้านล่างเป็นฟังก์ชัน php เพื่อทำให้กระบวนการนี้เป็นแบบอัตโนมัติ:
echo htmlentities ($ _ REQUEST ['เนื้อหา']);
หากเนื้อหาควรจะแสดงใน URL: คุณต้อง urlencode เนื้อหา
PHP มีสองฟังก์ชันในการเข้ารหัสนี้: urlencode () และ rawurlencode () ความแตกต่างระหว่างทั้งสองฟังก์ชั่นคือการเข้ารหัสของพื้นที่ซึ่งในฟังก์ชั่นแรกให้และให้% 20 และ "+" ในครั้งที่สอง
echo '//www.website?valeur='.urlencode($_REQUESTه'value']);
หากเนื้อหาควรถูกเก็บไว้ในฐานข้อมูล: จำเป็นต้องหลีกเลี่ยงอักขระทั้งหมดที่มีบทบาทเฉพาะในเซิร์ฟเวอร์ฐานข้อมูลที่ใช้ สำหรับ PHP และ MySQL ฟังก์ชั่น mysql_escape_string () ทำให้ตัวละครที่อาจเป็นอันตรายทั้งหมดในสตริงที่ส่งผ่านเป็นพารามิเตอร์
$ query = 'SELECT id จาก matable WHERE user = "'. mysql_escape_string ($ _ REQUEST ['user']). '"';
โปรดทราบว่า เซิร์ฟเวอร์มีการกำหนดค่าด้วย PHP ตัวเลือก magic_quotes ข้อมูลที่ส่งโดยผู้ใช้จะได้รับการป้องกันโดยอัตโนมัติด้วยแบ็กสแลช (แบ็กสแลช) ดังนั้นก่อนที่จะปกป้อง mysql_escape_string คุณควร "เลิกทำ" การป้องกันขั้นพื้นฐานนี้:
$ query = 'SELECT id จาก mytable WHERE user = "'. stripslashes (mysql_escape_string ($ _ REQUEST ['user'])). '"';