ฟังก์ชั่นความปลอดภัย PHP: strip_tags, filter_var, Md5 และ sha1
ภัยคุกคามความปลอดภัยที่อาจเกิดขึ้น
โดยพื้นฐานแล้วพวกเขาคือคนสองกลุ่มที่สามารถโจมตีระบบของคุณได้
- แฮกเกอร์ – โดยมีเจตนาที่จะเข้าถึงข้อมูลที่ไม่ได้รับอนุญาตหรือขัดขวางแอปพลิเคชัน
- ผู้ใช้ – พวกเขาอาจป้อนพารามิเตอร์ที่ไม่ถูกต้องในรูปแบบซึ่งอาจส่งผลเสียต่อเว็บไซต์หรือเว็บแอปพลิเคชันโดยไม่ได้ตั้งใจ
ต่อไปนี้คือประเภทของการโจมตีที่เราจำเป็นต้องระวัง
ด้วย SQL Injection – การโจมตีประเภทนี้จะเพิ่มโค้ดที่เป็นอันตรายลงไป SQL งบ
ทำได้โดยใช้แบบฟอร์มอินพุตของผู้ใช้หรือ URL ที่ใช้ตัวแปร
โค้ดที่ต่อท้ายแสดงความคิดเห็นเกี่ยวกับเงื่อนไขในส่วนคำสั่ง WHERE ของคำสั่ง SQL รหัสที่ต่อท้ายยังสามารถ;
- ใส่เงื่อนไขที่จะเป็นจริงเสมอ
- ลบข้อมูลจากตาราง
- อัปเดตข้อมูลในตาราง
- การโจมตีประเภทนี้มักจะใช้เพื่อเข้าถึงแอปพลิเคชันโดยไม่ได้รับอนุญาต
การเขียนสคริปต์ข้ามไซต์ – การโจมตีประเภทนี้มักจะแทรกโค้ดที่เป็นอันตราย Javaสคริปต์ ทำได้โดยใช้แบบฟอร์มอินพุตของผู้ใช้ เช่น แบบฟอร์มติดต่อเรา และแบบฟอร์มแสดงความคิดเห็น ซึ่งทำได้ดังนี้:
- ดึงข้อมูลที่ละเอียดอ่อนเช่น ข้อมูลคุกกี้
- เปลี่ยนเส้นทางผู้ใช้ไปยัง URL อื่น
- ภัยคุกคามอื่นๆ อาจรวมถึง การแทรกโค้ด PHP การแทรกเชลล์ การแทรกอีเมล การเปิดเผยโค้ดต้นฉบับของสคริปต์ เป็นต้น
แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของแอปพลิเคชัน PHP
ตอนนี้เรามาดูแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของ PHP บางส่วนที่เราต้องพิจารณาเมื่อพัฒนาแอปพลิเคชันของเรา
PHP strip_tags
ฟังก์ชัน strip_tags จะลบ HTML Javaต้นฉบับ หรือแท็ก PHP จากสตริง
ฟังก์ชันนี้มีประโยชน์เมื่อเราต้องปกป้องแอปพลิเคชันของเราจากการโจมตี เช่น การเขียนสคริปต์ข้ามไซต์
ลองพิจารณาแอปพลิเคชันที่รับความคิดเห็นจากผู้ใช้
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
สมมติว่าคุณได้บันทึก comment.php ไว้ในโฟลเดอร์ phptuts แล้ว ให้เรียกดู URLhttp://localhost/phptuts/comments.php
สมมติว่าคุณได้รับข้อมูลต่อไปนี้เป็นอินพุตของผู้ใช้ alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
เรียกดู URL http://localhost/phptuts/comments.php
ตอนนี้เรามารักษาความปลอดภัยแอปพลิเคชันของเราจากการโจมตีดังกล่าวโดยใช้ฟังก์ชัน strip_tags
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
เรียกดู URL http://localhost/phptuts/comments.php
ฟังก์ชั่น PHP filter_var
ฟังก์ชัน filter_var ใช้เพื่อตรวจสอบความถูกต้องและทำให้ข้อมูลสะอาด
การตรวจสอบความถูกต้องจะตรวจสอบว่าข้อมูลมีประเภทที่ถูกต้องหรือไม่ การตรวจสอบความถูกต้องของตัวเลขในสตริงส่งกลับผลลัพธ์ที่เป็นเท็จ
การฆ่าเชื้อคือการลบอักขระที่ผิดกฎหมายออกจาก เชือก.
ตรวจสอบลิงค์นี้เพื่อดูข้อมูลอ้างอิงที่สมบูรณ์ filter_var
รหัสนี้เป็นรหัสของระบบแสดงความคิดเห็น
โดยใช้ฟังก์ชัน filter_var และค่าคงที่ FILTER_SANITIZE_STRIPPED เพื่อตัดแท็ก
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Output:
alert('Your site sucks!');
ฟังก์ชัน mysqli_real_escape_string ฟังก์ชันนี้ใช้เพื่อป้องกันแอปพลิเคชันจากการแทรก SQL
สมมติว่าเรามีคำสั่ง SQL ต่อไปนี้เพื่อตรวจสอบ ID ผู้ใช้และรหัสผ่าน
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
ผู้ใช้ที่เป็นอันตรายสามารถป้อนรหัสต่อไปนี้ลงในกล่องข้อความ ID ผู้ใช้ ' หรือ 1 = 1 — และ 1234 ลงในกล่องข้อความรหัสผ่าน มาเขียนโค้ดโมดูลการตรวจสอบสิทธิ์กัน
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
ผลลัพธ์ที่ได้จะเป็น
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ที่นี่
- “SELECT * FROM users WHERE user_id = ”” ทดสอบหา ID ผู้ใช้ที่ว่างเปล่า
- “' หรือ 1 = 1 “ เป็นเงื่อนไขที่จะเป็นจริงเสมอไป
- “–” ความคิดเห็นที่ส่วนที่ทดสอบรหัสผ่าน
แบบสอบถามด้านบนจะส่งคืนผู้ใช้ทั้งหมด มาใช้ฟังก์ชัน mysqli_real_escape_string เพื่อรักษาความปลอดภัยโมดูลการเข้าสู่ระบบของเรากัน
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
รหัสข้างต้นจะส่งออก
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
หมายเหตุ เครื่องหมายคำพูดอันที่สองถูกยกเว้นสำหรับเรา โดยจะถือว่าเป็นส่วนหนึ่งของรหัสผู้ใช้ และรหัสผ่านจะไม่ถูกใส่ความคิดเห็น
PHP Md5 และ PHP sha1
Md5 เป็นตัวย่อสำหรับ Message Digest 5 และ sha1 เป็นตัวย่อสำหรับ Secure Hash Algorithm 1
ทั้งคู่ใช้ในการเข้ารหัสสตริง
เมื่อสตริงได้รับการเข้ารหัสแล้ว การถอดรหัสนั้นน่าเบื่อ
Md5 และ sha1 มีประโยชน์มากเมื่อจัดเก็บรหัสผ่านในฐานข้อมูล
โค้ดด้านล่างแสดงการใช้งาน md5 และ sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
สมมติว่าคุณได้บันทึกไฟล์ hashes.php ไว้ในโฟลเดอร์ phptuts แล้ว ให้เรียกดู URL
ดังที่คุณเห็นจากแฮชด้านบน หากผู้โจมตีเข้าถึงฐานข้อมูลของคุณ พวกเขาก็จะไม่ทราบรหัสผ่านสำหรับเข้าสู่ระบบ
สรุป
- ความปลอดภัยหมายถึงมาตรการที่ใช้เพื่อปกป้องแอปพลิเคชันจากการโจมตีโดยไม่ตั้งใจและเป็นอันตราย
- ฟังก์ชัน strip_tags ใช้เพื่อลบแท็กเช่น จากข้อมูลที่ป้อน
- ฟังก์ชัน filter_var ตรวจสอบและ php ทำความสะอาดข้อมูลอินพุต
- mysqli_real_escape_string ใช้เพื่อทำความสะอาดคำสั่ง SQL โดยจะลบอักขระที่เป็นอันตรายออกจากคำสั่ง
- ทั้ง MD5 และ SHA1 ใช้เพื่อเข้ารหัสรหัสผ่าน