PHP 表单验证

ယခုလက်ရာတွင် နောက်လက်အချက်ပြုထားသည့်လုပ်ငန်းများကို PHP အသုံးပြု၍ စာရင်းရှင်းတမ်းကို သတိပုံကြည့်တွေ့ခြင်းကို ဆွဲထုတ်ကြရမည်။

PHP 表单验证

提示:在处理 PHP 表单时请重视安全性!

这些页面将展示如何安全地处理 PHP 表单。对 HTML 表单数据进行适当的验证对于防范黑客和垃圾邮件很重要!

我们稍后使用的 HTML 表单包含多种输入字段:必需和可选的文本字段、单选按钮以及提交按钮:

အဆိုပါ ပေါ့ပ် ဟာ အဆိုပါ သတ်မှတ် ချက် ကို အသုံးပြုသည်။

အချက်အလက် သတ်မှတ် ချက်
Name အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။
E-mail အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။ အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။
Website အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။ အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။
Comment အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။ တစ်ခုတည်း ကို ရယူ ရန် အချက်အလက် ဖြစ်သည်။
Gender အပိုင်းအခြား ကို ရယူ ရန် လိုအပ်သည်။

အဆိုပါ ပေါ့ပ် အချက်အလက် အဖြစ် သာ အမျိုးအစား ပြင်ဆင်ခဲ့သည်။

အချက်အလက် အမျိုးအစား

name、email နှင့် website ဟာ အချက်အလက် အမျိုးအစား ဖြစ်ပြီး comment အမှုန် ဟာ အချက်အလက် ဖောင်ပွဲ ဖြစ်သည်။ HTML အချက်အလက် ဟာ အဆိုပါအပြီးဖြစ်သည်။

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

ပေါ့ပ် အချက်အလက်

ပေါ့ပ် အချက်အလက် အမျိုးအစား ဟာ အခြားအချက်အလက် အမျိုးအစား အား ပြင်းပြီး ပြောင်းလဲသော ဖိုင် ဖြစ်သည်။

如果您的页面使用了 PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。

提示:跨站点脚本(Cross-site scripting,XSS)是一种计算机安全漏洞类型,常见于 Web 应用程序。XSS 能够使攻击者向其他用户浏览的网页中输入客户端脚本。

အဆိုပါ "test_form.php" အမည်ရှိ စာမေးအပ် အချက်အလက် အရ အချက်အလက် အား

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

ဤအခြေအနေ အရ အသုံးပြုသူ အချက်အလက်ရှိ လိပ်လွှာ အရ လိုက်နုတ်သွားသော URL အား အသုံးပြုလိုက်လျှင်

<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 အမှတ်အသား အသုံးပြုခြင်း အခြေခံ အကျယ်အဝန်း အမှန် အဖြစ် ကျယ်ပြန် သည်

သင် သိလိုက်သင့်သည် HTML အချက်အလက် အတွင်း ကိုယ်ပိုင် JavaScript အချက်အလက် ထည့်သွင့်နိုင်သည်!黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等。

如果避免 $_SERVER["PHP_SELF"] 被利用?

通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。

表单代码是这样的:

;?>">

htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:


无法利用,没有危害!

通过 PHP 验证表单数据

我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。

在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:


- 代码不会执行,因为会被保存为转义代码,就像这样:

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

现在这条代码显示在页面上或 e-mail 中是安全的。

在用户提交该表单时,我们还要做两件事:

  1. (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
  2. (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)

接下来我们创建一个检查函数(相比一遍遍地写代码,这样效率更好)。

我们把函数命名为 test_input()。

现在,我们能够通过 test_input() 函数检查每个 $_POST 变量,脚本是这样的:

ဌာန

<?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 ဖြစ်လျှင် ပုံနှိပ်ထားသော ပုံနှိပ် အား သတ်မှတ်ထားသည် - နှင့် သတ်မှတ်ထားသော ပုံနှိပ် ကို သတ်မှတ်ထားသည်။ အကြောင်းရင်း ပုံနှိပ် မပြုလုပ်ခဲ့ပါက သတ်မှတ်ထားသော ပုံနှိပ် ကို ပြုလုပ်ထား မှသာ ပြုလုပ်ပါ။

သို့သော်၊ အရှိုးဖြစ်သော အရာများ တွင် အသုံးပြုထားသော အမှတ်အသားများ အား အခွင့်ပြုထားသည်။ အသုံးပြုသူ အမှတ်အသား မမှတ်ထားခဲ့ရှိပါက အော်ဂန်တင် လုပ်ကိုင်နိုင်ပါ။

ထို့ကြောင့်၊ အရှိုးဖြစ်သော အရာများ ပြုလုပ်ရန် နှင့် လိုအပ်ခဲ့သော အမှား အချက်အလက်များ ဖွင့်ပြရန် ပြင်ဆင်ပါ။