PHP ຟອມການກວດສອບ
- Page Previous PHP Form Handling
- Page Next PHP Form Required
ບົດນີ້ແລະບົດຕໍ່ໄປຈະອະທິບາຍວ່າບິດ PHP ທີ່ຈະກວດສອບຂໍ້ມູນຟອມ.
PHP ຟອມການກວດສອບ
ຄຳແນະນຳ:ກັບການຈັດການ PHP ຟອມ, ຕ້ອງກັງວົນຄວາມປອດໄພ!
ບັນດາໜ້າທີ່ນີ້ຈະສະແດງວ່າບາງວິທີທີ່ມີຄວາມປອດໄພທີ່ຈະຈັດການຟອມຂໍ້ມູນ PHP. ການກວດສອບຂໍ້ມູນຟອມ HTML ສຳລັບປ້ອງກັນຈາກຄົນເຈົ້າສະໜອງຄວາມປອດໄພແລະການສົ່ງອີເມວທີ່ບໍ່ມີຄວາມສຳຄັນ!
HTML ຟອມທີ່ພວກເຮົາຈະໃຊ້ຕໍ່ມາຈະມີຫຼາຍປ່ຽນຕົວຂໍ້ມູນ: ປ່ຽນຕົວຂໍ້ມູນທີ່ສະຖານະ, ປ່ຽນຕົວທີ່ດຳເນີນ, ກິດຈະກຳຍິນຍອມ ແລະ ກິດຈະກຳປະຕິບັດ.
ຟອມຂໍ້ມູນທີ່ພວກເຮົາມີຢູ່ປະຈຸບັນຈະໃຊ້ກົດລະບຽບການກວດສອບນີ້:
ອອກສຽງ | ກົດລະບຽບການກວດສອບ |
---|---|
Name | ສະຖານະສຳຄັນ. ຕ້ອງມີອີເມວທີ່ມີຜົນຢ່າງຫຼວງຫຼາຍ (ລວມທັງອີກອີກອີກ). |
ສະຖານະສຳຄັນ. ຕ້ອງມີສາຍທາງອີເມວທີ່ມີຜົນຢ່າງຫຼວງຫຼາຍ (ລວມທັງ @ ແລະ .). | |
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 ວ່າປອດໄພ.
ຕອນນີ້ພວກເຮົາຍັງຈະເຮັດສອງຢ່າງທີ່ຈະເຮັດຕາມການຂຽນຂອງຂໍ້ມູນຈົດຫນ້າ:
- (ຜ່ານຫົວຫນ້າ PHP trim() ) ລຶບສີດທີ່ບໍ່ມີຄວາມຈິງຈາກຂໍ້ມູນບັນທຶກຜູ້ນຳໃຊ້ (ອາການຈຳນວນທີ່ບໍ່ມີຄວາມຈິງ, ກາງ, ສາຍລາຍ)
- (ຜ່ານຫົວຫນ້າ 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, ຟອມຄົ້ນໄດ້ຖືກຕິດປະຕິບັດ - ແລະຄວາມບັນຊີຄວາມຈະຖືກກວດກາ. ຖ້າບໍ່ມີການຕິດປະຕິບັດ, ກັບໄປການກວດກາແລະສະແດງຟອມຄົ້ນສະລິບ.
ແຕ່ໃນຫົວຂໍ້ທີ່ກ່າວກ່ອນນີ້, ຂອງການເຂົ້າເມືອງທັງໝົດແມ່ນສິດລົງ. ແມ່ນວ່າຜູ້ນຳໃຊ້ບໍ່ໄດ້ເຂົ້າເມືອງຫຍັງກໍ່, ຄວາມບັນຊີບັນຫາຈະປະຕິບັດທຳ.
ຄັ້ງຫຼັງກໍ່ແມ່ນການສ້າງຟອມຄົ້ນສະເພາະຂອງການເຂົ້າເມືອງ, ແລະສ້າງຂໍ້ຄວາມຂອງການສົ່ງຂໍ້ບັນຫາທີ່ຈະນໍາໃຊ້.
- Page Previous PHP Form Handling
- Page Next PHP Form Required