PHP基础14:表单处理

<!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 字符会被替换为 和 &gt; 。这样可防止攻击者通过在表单中注入 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,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单。
?>
上一篇:VC++ 判断当前系统为32位还是64位


下一篇:Java 第四天 Mysql