<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php // define variables and set to empty values $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; } ?> <h1>htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。</h1> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Name: <input type="text" name="name"><br> E-mail: <input type="text" name="email"><br> Website: <input type="text" name="website"><br> Comment: <textarea name="comment" rows="5" cols="40"></textarea><br> Gender: Female<input type="radio" name="gender" value="female"> Male<input type="radio" name="gender" value="male"> <input type="submit" value="提交"> <hr> </form> </body> </html> <?php echo "姓名:".$_POST['name']; echo "<br>"; echo "邮箱:".$_POST['email']; echo "<br>"; echo "网址:".$_POST['website']; echo "<br>"; echo "留言:".$_POST['comment']; echo "<br>"; echo "性别:".$_POST['gender']; echo "<br>"; //1.通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。 // action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"])? // htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出: // <form method="post" action="test_form.php/"><script>alert('hacked')</script>"> //请注意在脚本开头,我们检查表单是否使用 $_SERVER["REQUEST_METHOD"] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。 ?>