PHP ຟອມການກວດສອບ

ບົດນີ້ແລະບົດຕໍ່ໄປຈະອະທິບາຍວ່າບິດ PHP ທີ່ຈະກວດສອບຂໍ້ມູນຟອມ.

PHP ຟອມການກວດສອບ

ຄຳແນະນຳ:ກັບການຈັດການ PHP ຟອມ, ຕ້ອງກັງວົນຄວາມປອດໄພ!

ບັນດາໜ້າທີ່ນີ້ຈະສະແດງວ່າບາງວິທີທີ່ມີຄວາມປອດໄພທີ່ຈະຈັດການຟອມຂໍ້ມູນ PHP. ການກວດສອບຂໍ້ມູນຟອມ HTML ສຳລັບປ້ອງກັນຈາກຄົນເຈົ້າສະໜອງຄວາມປອດໄພແລະການສົ່ງອີເມວທີ່ບໍ່ມີຄວາມສຳຄັນ!

HTML ຟອມທີ່ພວກເຮົາຈະໃຊ້ຕໍ່ມາຈະມີຫຼາຍປ່ຽນຕົວຂໍ້ມູນ: ປ່ຽນຕົວຂໍ້ມູນທີ່ສະຖານະ, ປ່ຽນຕົວທີ່ດຳເນີນ, ກິດຈະກຳຍິນຍອມ ແລະ ກິດຈະກຳປະຕິບັດ.

ຟອມຂໍ້ມູນທີ່ພວກເຮົາມີຢູ່ປະຈຸບັນຈະໃຊ້ກົດລະບຽບການກວດສອບນີ້:

ອອກສຽງ ກົດລະບຽບການກວດສອບ
Name ສະຖານະສຳຄັນ. ຕ້ອງມີອີເມວທີ່ມີຜົນຢ່າງຫຼວງຫຼາຍ (ລວມທັງອີກອີກອີກ).
E-mail ສະຖານະສຳຄັນ. ຕ້ອງມີສາຍທາງອີເມວທີ່ມີຜົນຢ່າງຫຼວງຫຼາຍ (ລວມທັງ @ ແລະ .).
Website ສິດສະຖານະ. ຖ້າຕ້ອງບັນທືກ, ຕ້ອງມີສາຍທາງທີ່ມີຜົນຢ່າງຫຼວງຫຼາຍ.
Comment ສິດສະຖານະ. ຕົວປະກອບຂໍ້ມູນສອງອອກສຽງ.
Gender ສະຖານະສຳຄັນ. ຕ້ອງເລືອກຢ່າງໜຶ່ງ.

ກ່ອນເພີ່ມຂໍ້ມູນນີ້, ພວກເຮົາຈະເບິ່ງລະບົບ HTML ຂອງຟອມຂໍ້ມູນນີ້:

ປ່ຽນຕົວຂໍ້ມູນ

name, email ແລະ website ຈະເປັນປ່ຽນຕົວຂໍ້ມູນທີ່ດຳເນີນ. Comment ອອກສຽງຈະເປັນຕົວປະກອບ.

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

ອອກສຽງທີ່ດຳເນີນ

gender ອອກສຽງທີ່ດຳເນີນຄື HTML ເຊັ່ນກ່າວນີ້:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

ປ່ຽນຕົວປະກອບຟອມ

ລະບົບ HTML ຂອງຟອມຂໍ້ມູນແມ່ນເຊັ່ນກ່າວນີ້:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

ບໍ່ວ່າການຍິນຍອມຟອມຂໍ້ມູນຈະສົ່ງຂໍ້ມູນທີ່ດຳເນີນຄື method="post".

ຫຍັງຈະເປັນ $_SERVER["PHP_SELF"] ຄວາມມູນ?

$_SERVER["PHP_SELF"] ຈະເປັນຄວາມມູນສາກົນທີ່ກັບຄືນສຽງບົດສະຫຼັກຂອງບົດສະຫຼັກປະຈຸບັນ.

ຍ້ອນນັ້ນ,$_SERVER["PHP_SELF"] ສົ່ງຂໍ້ມູນຟອມຂໍ້ມູນໄປໃນໜ້າທີ່ດັ່ງກ່າວແລ້ວຈະບໍ່ປີສະຫຼຸບໄປໜ້າອື່ນໆ. ດັ່ງນັ້ນຈະເຮັດໃຫ້ຜູ້ນຳໃຊ້ສາມາດເຫັນຂໍ້ຄວາມແນວບັນຫາໃນໜ້າຟອມຂໍ້ມູນ.

ວ່າແມ່ນຫຍັງ htmlspecialchars()?

ຫົວຫຼັກ htmlspecialchars() ສາມາດແປງພາສາທີ່ສະໜາດຫຼາຍສຳລັບ HTML. ຄວາມນຳໃຊ້ຂອງພາສາ HTML ເປັນ < > & ສະໜາດຫຼາຍທີ່ບໍ່ໃຫ້ໂຈນສະຕິກນຳໃຊ້ HTML ຫຼື JavaScript ທີ່ມີຄວາມຫຼາຍຄວາມຫົວໜ່ວງ (XSS).

ຄຳແນະນຳຂອງຄວາມປອດໄພຂອງ PHP ຕໍ່ກັບບັນາບັດ.

ສານ $_SERVER["PHP_SELF"] ສາມາດຖືກນຳໃຊ້ໂດຍໂຈນສະຕິກ!

ຖ້າບັນາບັດຂອງທ່ານໃຊ້ PHP_SELF, ຜູ້ນຳໃຊ້ສາມາດເຂົ້າຄູ່ມືລະບົບ XSS ທີ່ມີຄວາມຫຼາຍຄວາມຫົວໜ່ວງ.

ຄຳແນະນຳ:ການສະໜັບສິນລະບົບທີ່ຜ່ານເວັບໄຊ (Cross-site scripting, XSS) ແມ່ນການຂາດຄວາມປອດໄພທີ່ຫຼາຍທີ່ມີຢູ່ໃນການສະໜັບສິນລະບົບ Web. XSS ສາມາດຫຼົງຂໍ້ບັນນາທິການຄວາມໃຫ້ແກ່ຜູ້ນຳໃຊ້ທີ່ກຳລັງນໍາມາຊົມເວັບໄຊ.

ກໍລະນີທີ່ພວກເຮົາມີບັນາບັດໃນເວັບໄຊທີ່ຊື່ "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

ຕອນນີ້ ຖ້າຜູ້ນຳໃຊ້ໄດ້ເຂົ້າຄູ່ມື URL ທີ່ປົກກະຕິ: "http://www.example.com/test_form.php" ລະບົບດັ່ງກ່າວນີ້ຈະແປງໄປເປັນ:

<form method="post" action="test_form.php">

ຈົນຮອດປະຈຸບັນຫຍັງບັນຫາບໍ່ມີຄວາມຜິດພາດ.

ແຕ່ຖ້າຜູ້ນຳໃຊ້ໄດ້ເຂົ້າຄູ່ມືຄຳຫຼັງ URL ດັ່ງກ່າວນີ້:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

ໃນກໍລະນີນີ້ ລະບົບດັ່ງກ່າວນີ້ຈະແປງໄປເປັນ:

<form method="post" action="test_form.php"/><script>alert('hacked')</script>

ລະບົບດັ່ງກ່າວນີ້ໄດ້ເພີ່ມເອກະສານສະໜັບແລະຄຳສັ່ງຄວາມແຈ້ງ. ແລະບໍ່ດົນຫຼັງຈາກບັນາບັດເວັບໄຊນີ້ອອກໄປ ລະບົບ JavaScript ຈະດຳເນີນງານ (ຜູ້ນຳໃຊ້ຈະເຫັນການແຈ້ງຄວາມແຈ້ງ). ນີ້ພຽງແຕ່ກໍລະນີສົມບູນທີ່ບໍ່ມີຄວາມອັນຕະລາຍຂອງ PHP_SELF ທີ່ຖືກໃຊ້.

ທ່ານຄວນຮູ້ ປະກອບໄດ້ສະເໜີ JavaScript ລະບົບ ໃນໄຕອັບ <script>!ຜູ້ໂຈມຕີສາມາດກູ້ຄົນນຳໃຊ້ຕິດຕໍ່ໄປຫາອຸປະກອນບໍລິການອື່ນໆໃນຄອມທີ່ອື່ນໆ, ອີກຕາມນີ້ຫົວຫນ້າຂອງສາຍຂອງຂໍ້ມູນຜູ້ນຳໃຊ້ທີ່ມີຄວາມລຸ່ມລຸ່ມ, ຄືນອາດສົ່ງຂໍ້ມູນຈົດຫນ້າໄປຫາທີ່ອື່ນໆແລະພົບຄວາມສ່ຽງອື່ນໆ.

ການຫລີກຫາ $_SERVER["PHP_SELF"]

ຈາກການໃຊ້ຫົວຫນ້າ htmlspecialchars()

ວິທິດຂອງຟອມຈະເປັນ:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() ການປ່ຽນສີດສະເພາະຈາກ HTML ວ່າ:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>">

ບໍ່ສາມາດໃຊ້ໄດ້, ບໍ່ມີຄວາມສ່ຽງ!

ການວິການຂໍ້ມູນຂອງຟອມ

ຢ່າງທີ່ພວກເຮົາຈະເຮັດທຳອິດຈະເປັນການສົ່ງຂໍ້ມູນຜູ້ນຳໃຊ້ຜ່ານຫົວຫນ້າ PHP htmlspecialchars()

ຫລັງຈາກພວກເຮົາໃຊ້ຫົວຫນ້າ htmlspecialchars()

<script>location.href('http://www.hacked.com')</script>

- ວິທິດຈະບໍ່ຈະດຳເນີນຕາມທີ່ຈະຖືກກະຕຸ້ນໃຫ້ເປັນວິທິດປອດໄພ, ອີກຕາມນີ້:

<script>location.href('http://www.hacked.com')</script>

ຕອນນີ້ວິທິດດັ່ງກ່າວຈະຖືກກະຕຸ້ນໃນໜ້າເວັບປະຊາຊົນຫລື e-mail ວ່າປອດໄພ.

ຕອນນີ້ພວກເຮົາຍັງຈະເຮັດສອງຢ່າງທີ່ຈະເຮັດຕາມການຂຽນຂອງຂໍ້ມູນຈົດຫນ້າ:

  1. (ຜ່ານຫົວຫນ້າ PHP trim() ) ລຶບສີດທີ່ບໍ່ມີຄວາມຈິງຈາກຂໍ້ມູນບັນທຶກຜູ້ນຳໃຊ້ (ອາການຈຳນວນທີ່ບໍ່ມີຄວາມຈິງ, ກາງ, ສາຍລາຍ)
  2. (ຜ່ານຫົວຫນ້າ PHP stripslashes() ) ລຶບສີດປອດຂອງຂໍ້ມູນບັນທຶກຜູ້ນຳໃຊ້ (\)

ຫລັງຈາກນັ້ນພວກເຮົາຈະສ້າງຫົວຫນ້າກວດກາ (ຕາມການຂຽນກັນຄືນຫລາຍຄັ້ງແລ້ວຈະມີປະສິດທິພາບຫລາຍຂື້ນ).

ພວກເຮົາຈະເອີ້ນຫົວຫນ້າຫົວຫນ້າວ່າ test_input()。

ຕອນນີ້ພວກເຮົາສາມາດກວດກາປະກອບ $_POST ຜ່ານຫົວຫນ້າ test_input() ທີ່ຈະເບິ່ງໄດ້:

ຕົວຢ່າງ

<?php
// ການຈຳນວນປະກອບແລະຈັດໃຫ້ບໍ່ມີຄູ່ມູນ
$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 ແມ່ນ POST, ຟອມຄົ້ນໄດ້ຖືກຕິດປະຕິບັດ - ແລະຄວາມບັນຊີຄວາມຈະຖືກກວດກາ. ຖ້າບໍ່ມີການຕິດປະຕິບັດ, ກັບໄປການກວດກາແລະສະແດງຟອມຄົ້ນສະລິບ.

ແຕ່ໃນຫົວຂໍ້ທີ່ກ່າວກ່ອນນີ້, ຂອງການເຂົ້າເມືອງທັງໝົດແມ່ນສິດລົງ. ແມ່ນວ່າຜູ້ນຳໃຊ້ບໍ່ໄດ້ເຂົ້າເມືອງຫຍັງກໍ່, ຄວາມບັນຊີບັນຫາຈະປະຕິບັດທຳ.

ຄັ້ງຫຼັງກໍ່ແມ່ນການສ້າງຟອມຄົ້ນສະເພາະຂອງການເຂົ້າເມືອງ, ແລະສ້າງຂໍ້ຄວາມຂອງການສົ່ງຂໍ້ບັນຫາທີ່ຈະນໍາໃຊ້.