之類的 HTML 字符會(huì)被替換為 < 和 > 。這樣可防止攻擊者通過在表單中注入 HTML 或 JavaScript 代碼(跨站點(diǎn)腳本攻擊)對(duì)代碼進(jìn)行利用">

通過使用 htmlspecialchars() 函數(shù)能夠避免 $_SERVER[“PHP_SELF”] 被利用。

表單代碼是這樣的:

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

htmlspecialchars() 函數(shù)把特殊字符轉(zhuǎn)換為 HTML 實(shí)體?,F(xiàn)在,如果用戶試圖利用 PHP_SELF 變量,會(huì)導(dǎo)致如下輸出:

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

無法利用,沒有危害!

通過 PHP 驗(yàn)證表單數(shù)據(jù)

我們要做的第一件事是通過 PHP 的 htmlspecialchars() 函數(shù)傳遞所有變量。

在我們使用 htmlspecialchars() 函數(shù)后,如果用戶試圖在文本字段中提交以下內(nèi)容:

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

– 代碼不會(huì)執(zhí)行,因?yàn)闀?huì)被保存為轉(zhuǎn)義代碼,就像這樣:

現(xiàn)在這條代碼顯示在頁面上或 e-mail 中是安全的。

在用戶提交該表單時(shí),我們還要做兩件事:

  1. (通過 PHP trim() 函數(shù))去除用戶輸入數(shù)據(jù)中不必要的字符(多余的空格、制表符、換行)
  2. (通過 PHP stripslashes() 函數(shù))刪除用戶輸入數(shù)據(jù)中的反斜杠(\)

接下來我們創(chuàng)建一個(gè)檢查函數(shù)(相比一遍遍地寫代碼,這樣效率更好)。

我們把函數(shù)命名為 test_input()。

現(xiàn)在,我們能夠通過 test_input() 函數(shù)檢查每個(gè) $_POST 變量,腳本是這樣的:

實(shí)例

<?php
// 定義變量并設(shè)置為空值
$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;
}
?>

請(qǐng)注意在腳本開頭,我們檢查表單是否使用 $_SERVER[“REQUEST_METHOD”] 進(jìn)行提交。如果 REQUEST_METHOD 是 POST,那么表單已被提交 – 并且應(yīng)該對(duì)其進(jìn)行驗(yàn)證。如果未提交,則跳過驗(yàn)證并顯示一個(gè)空白表單。

不過,在上面的例子中,所有輸入字段都是可選的。即使用戶未輸入任何數(shù)據(jù),腳本也能正常工作。

下一步是制作必填輸入字段,并創(chuàng)建需要時(shí)使用的錯(cuò)誤消息。

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-62778877-8306;郵箱:fanjiao@west.cn。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明出處:西部數(shù)碼知識(shí)庫(kù) » PHP表單驗(yàn)證功能

登錄

找回密碼

注冊(cè)