PHP安全真正需要什么

PHP安全真正需要什么,php,security,Php,Security,我搜索了一下,在PHP中找到了这样一行代码 $mots = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($_POST['mots'])))); 我想知道,为了尽可能好地保护$u POST条目,这其中有多少是真正必要的 感谢如果您计划以任何方式在sql中使用$mots,那么只需要mysql\u real\u escape\u字符串,因为这样可以防止sql注入 当然,这取决于您计划如何使用$MOT。远程文件包含

我搜索了一下,在PHP中找到了这样一行代码

$mots = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($_POST['mots']))));
我想知道,为了尽可能好地保护$u POST条目,这其中有多少是真正必要的


感谢

如果您计划以任何方式在sql中使用$mots,那么只需要mysql\u real\u escape\u字符串,因为这样可以防止sql注入

当然,这取决于您计划如何使用$MOT。远程文件包含(Remote file inclusion)是一种允许用户为您的服务器提供自己的php代码以供执行的方法,它基于操纵一个变量,该变量将强制脚本执行您不希望执行的操作。这通常发生在包含变量中的代码时,而不是直接包含某些内容时


例如,include($mots),而不是include(config.php)

你问题的标题可以作为一本书的基础。(可能已经过了很多次了)但如果您试图阻止SQL注入,请在准备好的查询(和参数绑定)中使用PDO。这消除了SQL注入的风险。

清理用户数据 当涉及到数据清理时,具体而言,在本例中为用户输入数据,需要什么取决于多种标准,包括(但不限于)以下各项:

  • 预期的数据类型(例如
    字符串
    整数
    二进制
  • 存储数据的位置(例如
    数据库
    文本文件
  • 如何使用数据(例如,
    显示回用户
    服务器端计算
  • 好吧,你明白要点了
  • 预期数据类型 当涉及到清理用户输入时,预期的数据类型非常重要,因为它可以使清理变得非常简单或更复杂

    典型的预期输入类型为:

  • 正文
  • 整数
  • 十进制
  • 二进制的
  • 如果输入只是一个
    整数
    十进制
    数字,您只需确保输入已转换为预期的数据类型,即可轻松清理

    如果出现
    文本
    预期输入,您可能希望转义或去除某些字符/字符串,以防止出现
    XSS
    SQL注入
    之类的情况

    在输入
    二进制
    数据的情况下,您需要确保数据是安全的,并且可能希望运行恶意代码扫描,并为文件设置正确的用户权限,以防止代码在服务器上运行。与
    text
    一样,您可能还需要转义某些字符

    存储位置 存储位置也会影响所需的消毒。以
    数据库
    文件
    为例:

    在将数据输入数据库时,您需要转义某些字符,以保护您的系统免受试图
    SQL注入的人的攻击
    ,反之,在不使用数据库时,您没有使用
    SQL
    ,因此不需要专门针对
    SQL注入进行保护

    但是,这并不意味着不保存到数据库时可以放松。保存到文件还可能导致上载恶意代码,应采取措施防止已上载或创建用于存储信息的文件在服务器上成为可执行文件。(这不限于特定允许上传文件的代码:

    <input type="file" name="uploadFile">
    
    数据使用 允许用户输入数据的目的也将在决定您需要对用户输入应用何种保护方面发挥作用。虽然输入可用于许多不同的原因,但主要(或最常见)的原因可能是:

  • 将显示回用户(例如,
    论坛帖子
    评论
    图像
  • 用于现场计算(例如,
    热量计数器
    保险报价
  • 如果要将数据显示回用户,您需要考虑如何防止受到诸如
    XSS
    之类的攻击,以及如何防止对您的站点进行视觉破坏;这两种方法都可以通过插入标签来实现,例如:

    另一方面,如果数据不会以当前的形式显示给用户,那么
    XSS
    等可能有些不相关

    何时清理/格式化 在您对it服务器端执行任何可能受不可靠代码影响的操作之前(例如,在插入数据库之前),应先对数据进行清理

    您可能会选择在使用数据之前进行清理您可能会选择在启动脚本后立即清理代码。但这主要取决于个人偏好和相关系统的使用情况

    然而,对于何时运行
    htmlspecialchars
    (即在上传到数据库之前vs向用户显示之前)之类的函数,经常会有争论。这同样取决于个人偏好和您如何使用数据,但这两种方法都有优点和缺点,我不会详细说明

    但是,如果您将用户数据作为
    raw
    (但安全)存储到数据库中然后,您可以随时更改清理数据的方式。在使用
    htmlspecialchars
    stip_标签
    等功能后,您开始存储数据。您正在从输入中删除/更改一些数据,您可能会在以后决定允许/包括这些数据,但这只是为了意识到您已经丢失了数据。例如:

    file_put_contents($uploaded_data);
    
    strip_tags
    默认情况下将从输入中剥离所有可能 目前看来这是个好主意,但进一步说,你 可能决定实际要允许一些标记,如
    -但它们不再出现在已保存的任何输入中

    当然,如果你是
    $mots = mysql_real_escape_string( //Escapes certain characters to 'sanitize' for input to database
            stripslashes( //Removes any escape slashes added by default in $_POST
                strip_tags( //Removes any tags present in the text e.g. <b></b>
                    htmlspecialchars( //Coverts some charachters like £ to html codes like &pound;
                        $_POST['mots']
                    )
                )
            )
        );
    
    $_POST['userinput'] = "<b>Some user input</b>"; //Input uploaded from form
    echo strip_tags($_POST['userinput']);
        //Ouputs: Some user input
    
    echo htmlspecialchars($_POST['userinput'], ENT_QUOTES, 'UTF-8');
        //Output: &lt;b&gt;Some user input&lt;/b&gt;
    
    echo strip_tags(htmlspecialchars());
        //Output: &lt;b&gt;Some user input&lt;/b&gt;