ฟังก์ชั่นความปลอดภัย 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

PHP strip_tags

สมมติว่าคุณได้รับข้อมูลต่อไปนี้เป็นอินพุตของผู้ใช้ 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

PHP strip_tags

ตอนนี้เรามารักษาความปลอดภัยแอปพลิเคชันของเราจากการโจมตีดังกล่าวโดยใช้ฟังก์ชัน strip_tags

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

เรียกดู URL http://localhost/phptuts/comments.php

PHP strip_tags

ฟังก์ชั่น 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

PHP Md5 และ PHP sha1

ดังที่คุณเห็นจากแฮชด้านบน หากผู้โจมตีเข้าถึงฐานข้อมูลของคุณ พวกเขาก็จะไม่ทราบรหัสผ่านสำหรับเข้าสู่ระบบ

สรุป

  • ความปลอดภัยหมายถึงมาตรการที่ใช้เพื่อปกป้องแอปพลิเคชันจากการโจมตีโดยไม่ตั้งใจและเป็นอันตราย
  • ฟังก์ชัน strip_tags ใช้เพื่อลบแท็กเช่น จากข้อมูลที่ป้อน
  • ฟังก์ชัน filter_var ตรวจสอบและ php ทำความสะอาดข้อมูลอินพุต
  • mysqli_real_escape_string ใช้เพื่อทำความสะอาดคำสั่ง SQL โดยจะลบอักขระที่เป็นอันตรายออกจากคำสั่ง
  • ทั้ง MD5 และ SHA1 ใช้เพื่อเข้ารหัสรหัสผ่าน