PHP ตรวจสอบแบบฟอร์ม
บทนี้จะอธิบายวิธีการใช้ข้อมูลแบบ PHP ของเราส่งมาโดยการตรวจสอบลูกค้า
PHP ตรวจสอบแบบฟอร์ม
ในการจัดการกับแบบ PHP เราจำเป็นต้องพิจารณาการรักษาความปลอดภัย บทนี้เราจะแสดงให้คุณแบบ PHP การประมวลผลความปลอดภัยของข้อมูลเพื่อป้องกันไม่ให้แฮกเกอร์และสแปมเราจำเป็นต้องรักษาความปลอดภัยตรวจสอบข้อมูลแบบฟอร์ม |
รูปแบบ HTML ที่อธิบายไว้ในส่วนนี้มีช่องใส่ต่อไปนี้: ต้องใช้กับช่องข้อความเลือกปุ่มและส่งปุ่ม:
ดังกล่าวข้างต้นรูปแบบกฎการตรวจสอบมีดังนี้
สนาม | กฎการตรวจสอบ |
---|---|
ชื่อ | ต้อง + มีเพียงตัวอักษรและช่องว่าง |
ต้อง + ต้องเป็นที่อยู่อีเมลที่ถูกต้อง (รวมถึง '@' และ '.') | |
สถาน | ต้อง ถ้ามีก็ต้องมี URL ที่ถูกต้อง |
คำพูด | ต้อง ช่องใส่หลายสาย (เขตข้อความ) |
เพศ | ต้อง คุณต้องเลือก |
อันดับแรกให้เราดูที่รหัสรูปแบบ HTML ธรรมดา:
ฟิลด์ข้อความ
"ชื่อ", "E-mail" และ "URL" ข้อมูลเป็นองค์ประกอบการป้อนข้อความฟิลด์ "หมายเหตุ" เป็น textarea โค้ด HTML ดังนี้
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
ปุ่ม
"เพศ" ฟิลด์เป็นปุ่มโค้ด HTML ลักษณะเช่นนี้:
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
องค์ประกอบของแบบฟอร์ม
รหัสรูปแบบ HTML ดังนี้
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
ใช้วิธีการแบบฟอร์มนี้ = "โพสต์" วิธีการในการส่งข้อมูล
คือ $ _SERVER [ "PHP_SELF"] ตัวแปรอะไร? $ _SERVER [ "PHP_SELF"] เป็นตัวแปรทั่วโลกซุปเปอร์ส่งกลับชื่อไฟล์สคริปต์ในขณะนี้การดำเนินการที่เกี่ยวข้องกับรากเอกสาร |
ดังนั้น $ _SERVER [ "PHP_SELF"] จะส่งข้อมูลแบบฟอร์มหน้าปัจจุบันแทนการกระโดดไปยังหน้าเว็บที่แตกต่างกัน
htmlspecialchars () วิธีการคืออะไร? htmlspecialchars () ฟังก์ชั่นกับตัวละครที่กำหนดไว้ล่วงหน้าในบางหน่วยงาน HTML ตัวละครที่กำหนดไว้ล่วงหน้าคือ:
|
แบบ PHP จำเป็นที่จะทำให้เกิดความสนใจไปที่ไหน?
$ _SERVER [ "PHP_SELF"] ตัวแปรสามารถนำมาใช้โดยแฮกเกอร์!
เมื่อแฮกเกอร์ใช้ข้ามไซต์เชื่อมโยงการเขียนสคริปต์ HTTP เพื่อโจมตี $ _ SERVER [ "PHP_SELF"] ตัวแปรจะถูกฝังอยู่ในสคริปต์เซิร์ฟเวอร์ เหตุผลก็คือว่าข้ามไซต์ไฟล์สคริปต์ที่ปฏิบัติการอยู่ติดกับเส้นทางที่อยู่เบื้องหลังดังนั้น $ _SERVER [ "PHP_SELF"] สตริงจะมีการเชื่อมโยงเบื้องหลัง HTTP รหัส JavaScript
XSS ยังเป็นที่รู้จัก CSS (Cross Site-Script) ข้ามไซต์โจมตีการเขียนสคริปต์ โจมตีที่เป็นอันตรายที่จะแทรกหน้าเว็บที่เป็นอันตรายในโค้ด HTML เมื่อผู้ใช้เรียกดูหน้าเว็บที่ฝังอยู่ภายในรหัส HTML จะถูกดำเนินการเพื่อให้บรรลุวัตถุประสงค์ที่เฉพาะเจาะจงของใช้ที่เป็นอันตราย |
ระบุไฟล์รูปแบบดังต่อไปนี้ชื่อ "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
ตอนนี้เราใช้ URL เพื่อส่งที่ระบุอยู่ "test_form.php" ดังแสดงในโค้ดข้างต้นมีการแก้ไขดังต่อไปนี้:
<form method="post" action="test_form.php">
ทำดีเพื่อให้
แต่คำนึงถึงผู้ใช้จะป้อนที่อยู่ต่อไปนี้ในแถบที่อยู่ของเบราว์เซอร์ของคุณ:
http://www.w3write.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
URL ที่ดังกล่าวข้างต้นจะถูกตีความว่าเป็นรหัสต่อไปนี้และดำเนินการได้:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
เพิ่มรหัสแท็กสคริปต์และเพิ่มคำสั่งแจ้งเตือน เมื่อโหลดหน้าเว็บจะรันโค้ดจาวาสคริ (ผู้ใช้จะเห็นป๊อปอัพ) นี่เป็นเพียงตัวอย่างง่ายๆเพื่อแสดงให้เห็นตัวแปร PHP_SELF จะถูกใช้โดยแฮกเกอร์
โปรดทราบว่าโค้ด JavaScript ใด ๆ ที่สามารถเพิ่มไปยัง <script> แท็ก! แฮกเกอร์สามารถใช้เพจนี้เพื่อเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์บนหน้าอื่นไฟล์โค้ดหน้าเพื่อป้องกันโค้ดที่เป็นอันตรายรหัสสามารถแก้ไขได้ที่จะได้รับตัวแปรทั่วโลกของผู้ใช้หรือข้อมูลในแบบฟอร์ม
วิธีการหลีกเลี่ยง $ _SERVER [ "PHP_SELF"] ถูกเอาเปรียบ?
$ _SERVER [ "PHP_SELF"] โดย htmlspecialchars () ฟังก์ชันเพื่อหลีกเลี่ยงการถูกเอาเปรียบ
รูปของรหัสดังต่อไปนี้:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars () เพื่อตัวอักษรที่กำหนดไว้ล่วงหน้าในบางหน่วยงาน HTML ตอนนี้ถ้าผู้ใช้ต้องการใช้ตัวแปร PHP_SELF ผลจะออกเป็นดังนี้
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
ความพยายามช่องโหว่ล้มเหลว!
ใช้ PHP แบบฟอร์มการตรวจสอบข้อมูล
ครั้งแรกของทั้งหมดที่เราได้ส่งข้อมูลให้กับผู้ใช้ () ฟังก์ชั่นการประมวลผลผ่าน htmlspecialchars ของ PHP
เมื่อเราใช้ htmlspecialchars () ฟังก์ชันที่ผู้ใช้พยายามที่จะส่งช่องข้อความต่อไปนี้:
<script>location.href('http://www.w3write.com')</script>
รหัสจะไม่ต้องถูกประหารชีวิตเพราะมันจะถูกบันทึกเป็นรหัสหลบหนี HTML ดังนี้
<script>location.href('http://www.w3write.com')</script>
รหัสข้างต้นมีความปลอดภัยและสามารถแสดงหรือใส่ข้อความในหน้า
เมื่อผู้ใช้ส่งแบบฟอร์มที่เราจะทำสองสิ่งต่อไปนี้:
- ใช้ PHP ตัด () ฟังก์ชันที่จะลบข้อมูลที่ผู้ใช้ป้อนตัวอักษรที่ไม่จำเป็น (เช่น: พื้นที่แท็บขึ้นบรรทัดใหม่)
- ใช้ PHP stripslashes () ฟังก์ชั่นในการลบทับขวาผู้ใช้ป้อนข้อมูล (\)
ให้ฟังก์ชั่นการกรองเหล่านี้เขียนในฟังก์ชั่นของความหมายของเราเองนี้มากสามารถเพิ่มสามารถนำมาใช้รหัส
ฟังก์ชั่นชื่อ test_input ()
ตอนนี้เราสามารถ test_input () ฟังก์ชั่นในการตรวจสอบทั้งหมดของตัวแปรใน $ _POST รหัสสคริปต์จะเป็นดังนี้:
ตัวอย่าง
// 定义变量并默认设置为空值
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
เล่นอินสแตนซ์»
ทราบว่าเมื่อเรารันสคริปต์ข้างต้นโดย $ _SERVER [ "REQUEST_METHOD"] การตรวจสอบว่าการส่งแบบฟอร์ม หาก REQUEST_METHOD โพสต์รูปแบบจะถูกส่ง - ข้อมูลจะถูกตรวจสอบ หากรูปแบบที่ไม่ได้ส่งมาจะข้ามการตรวจสอบและแสดงว่างเปล่า
ใช้รายการการป้อนข้อมูลในตัวอย่างข้างต้นเป็นตัวเลือกแม้ว่าผู้ใช้ไม่ได้ป้อนข้อมูลใด ๆ ที่สามารถแสดงผลได้อย่างถูกต้อง
ในส่วนถัดไปเราจะอธิบายถึงวิธีการตรวจสอบข้อมูลป้อนโดยผู้ใช้