zoukankan      html  css  js  c++  java
  • PHP 表单验证--安全性--小记

    HTML 表单数据进行适当的验证对于防范黑客和垃圾邮件很重要!
    ---------------------------------------------------------------------------------------------------------------------------
     
    首先,用户信息等表单处理最好选用 POST方式
    $_GET 是通过 URL 参数传递到当前脚本的变量数组。 $_POST 是通过 HTTP POST 传递到当前脚本的变量数组。
    [1]通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大于 2000 个字符。不过,由于变量显示在 URL 中,可把页面添加到书签中。
    [2]通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制。此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。 不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。
     
    其次,最好对表单进行验证处理:
    例如 某个表单的验证:
    <span style="font-size:14px;"><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    </span>
    $_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。 因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。
    htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 &lt; 和 &gt; 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
     
    $_SERVER["PHP_SELF"] 变量能够被黑客利用! 如果您的页面使用了 PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS),XSS 能够使攻击者向其他用户浏览的网页中输入用户脚本。
     
     
    如果用户进入的是地址栏中正常的 URL:
    这些代码
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

    就会转换为:

    <form method="post" action="test_form.php">

    但假如用户输入URL:

    代码就会转换成:
    <span style="font-size:14px;"><form method="post" action="test_form.php"/><script>alert('hacked')</script>
    </span>
    这段代码加入了一段脚本和一个提示命令,并且当此页面加载后,就会执行 JavaScript 代码.黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等
     
     
     
    为了避免 $_SERVER["PHP_SELF"] 被利用,用 htmlspecialchars() 函数--把特殊字符转换为 HTML 实体,如下所示:
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

    在使用此函数后,假如用户在文本区域输入:

    但代码不会执行,因为会被保存为转义代码

    当然了,数据被处理了,也要处理回来

      在用户提交该表单时,我们还要做两件事: (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行) (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠()

    如下例子所示,最后 $the_name 即为表单中name多次处理后的值

    <?php
    $the_name = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
       $data = $_POST["name"];
       $data = trim($data);
       $data = stripslashes($data);
       $data = htmlspecialchars($data);
       $the_name = $data;
       
    }
    ?>

    --------------------终于知道了黑客们攻击网站盗取数据的某个方式,建站时多多注意吧..----------------------------

  • 相关阅读:
    inndo 表与存储逻辑_1
    msyql master thread
    redo log重做日志缓冲
    redo log 重做日志
    Latex 写算法伪代码
    Just for test
    ASP.NET Web API 2 OData v4教程
    MVC系统过滤器 OutputCacheAttribute
    MVC系统过滤器、自定义过滤器
    .NET如何从配置文件中获取连接字符串
  • 原文地址:https://www.cnblogs.com/imwtr/p/4069136.html
Copyright © 2011-2022 走看看