Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果我使用以下命令,正则表达式是否用于表单验证?_Php_Mysql_Regex_Validation_Code Injection - Fatal编程技术网

Php 如果我使用以下命令,正则表达式是否用于表单验证?

Php 如果我使用以下命令,正则表达式是否用于表单验证?,php,mysql,regex,validation,code-injection,Php,Mysql,Regex,Validation,Code Injection,我知道不管怎样加上它都没有坏处,但我很好奇 如果我要使用htmlentities();使用ENT_引号,然后使用mysql_real_escape_string();在将变量输入数据库之前,只需使用html_entity_decode();连同斜杠();要显示信息 这仍然是安全的吗?在将数据存储到数据库之前,不需要使用htmlentities。事实上,如果你不这样做,事情会变得更容易。在HTML输出中回显字符串时,仅对字符串使用htmlentities(无论是从数据库还是从其他源获取字符串) 从

我知道不管怎样加上它都没有坏处,但我很好奇

如果我要使用htmlentities();使用ENT_引号,然后使用mysql_real_escape_string();在将变量输入数据库之前,只需使用html_entity_decode();连同斜杠();要显示信息


这仍然是安全的吗?

在将数据存储到数据库之前,不需要使用htmlentities。事实上,如果你不这样做,事情会变得更容易。在HTML输出中回显字符串时,仅对字符串使用htmlentities(无论是从数据库还是从其他源获取字符串)

从数据库获取数据后,不需要对数据应用stripslashes。数据库没有存储额外的转义字符——除非您错误地应用了双重转义

以下是正确的顺序:

  • 从表单获取数据

    $input = $_GET["input"];
    
  • 应用转义一次

  • 将其插入数据库

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  • 稍后从数据库中获取它

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  • 在输出时应用htmlentities一次

    echo htmlentities($data);
    

  • 在将数据存储到数据库中之前,不需要使用htmlentities。事实上,如果你不这样做,事情会变得更容易。在HTML输出中回显字符串时,仅对字符串使用htmlentities(无论是从数据库还是从其他源获取字符串)

    从数据库获取数据后,不需要对数据应用stripslashes。数据库没有存储额外的转义字符——除非您错误地应用了双重转义

    以下是正确的顺序:

  • 从表单获取数据

    $input = $_GET["input"];
    
  • 应用转义一次

  • 将其插入数据库

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  • 稍后从数据库中获取它

    $sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)";
    $success = mysql_query($sql);
    
    $sql = "SELECT column1 FROM MyTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $data = $row["column1"];
    
  • 在输出时应用htmlentities一次

    echo htmlentities($data);
    

  • 您是否在询问是否仍然需要regex作为所有这些函数旁边的表单验证


    如果这就是你要问的,那么在我看来,是的,你永远都不够安全。我刚刚编写了一个验证类,其中包含了一些函数,这些函数可以在需要特定输入时使用regex清理代码和其他函数。

    您是否在询问是否仍然需要在所有这些函数旁边使用regex作为表单验证


    如果这就是你要问的,那么在我看来,是的,你永远都不够安全。我刚刚编写了一个验证类,其中的函数可以在需要特定输入时使用regex清理代码和其他函数。

    如果您知道这些函数的用途,您可以自己回答这个问题:

    • 用于替换HTML特殊字符
      &
      和。这用于对数据进行编码,以便在任何HTML上下文中安全地输出(尤其是使用ENT_引号,以便它甚至可以在单引号属性值中使用)。例如:

      <textarea><?php echo htmlentities('</textarea>'); ?></textarea>
      
      $query = 'SELECT "'.mysql_real_escape_string("\n\r\t\v\f\\\"").'"';
      
    • 是与
      htmlentities
      相反的函数,并替换HTML字符引用(数字和实体字符引用)

    • 删除转义字符
      \


    如果您只是想保护自己不受SQL注入的影响,请对mysql查询中使用的数据使用
    mysql\u real\u escape\u string
    。您也可以使用准备好的语句或参数化查询生成器(参见、、等。)。

    如果您知道这些函数的用途,您可以自己回答这个问题:

    • 用于替换HTML特殊字符
      &
      和。这用于对数据进行编码,以便在任何HTML上下文中安全地输出(尤其是使用ENT_引号,以便它甚至可以在单引号的属性值中使用)。例如:

      <textarea><?php echo htmlentities('</textarea>'); ?></textarea>
      
      $query = 'SELECT "'.mysql_real_escape_string("\n\r\t\v\f\\\"").'"';
      
    • 是与
      htmlentities
      相反的函数,并替换HTML字符引用(数字和实体字符引用)

    • 删除转义字符
      \


    如果您只是想防止SQL注入,请对mysql查询中使用的数据使用
    mysql\u real\u escape\u string
    。您还可以使用准备好的语句或参数化查询生成器(请参见、、等)。

    来自试图从表单输入恶意攻击数据库的人…来自试图从表单输入恶意攻击数据库的人…因此,采取仅使用mysql\u real\u escape\u字符串的方法,然后进入数据库,这样安全吗?那么XSS呢?我以为htmlentities会有助于抵御这种攻击,而不是xss攻击。我有一个带有表单的演示,用户添加了html代码,其中包含指向xss javascript文件的链接,该文件将运行恶意代码。我使用了htmlentities(),因此html将被打印,而不是由浏览器处理。当然,如果您允许html输入正则表达式,那么htmlentities()
    htmlentities
    与将数据插入数据库无关。它用于显示目的,用于通过应用程序将数据从数据库移动到屏幕上。所以基本上,htmlentities和mysql_real_escape_string将停止注入和XSS JS文件?但是PHP正则表达式只是额外的安全性,可以真正将人们限制在您希望他们输入的范围内?JS正则表达式仅仅是为了在客户端更方便地使用/导航?(因此,在他们完全理解之前,不会将他们从一页引导到另一页)是的,这是一个很好的理解。我倾向于使用正则表达式来验证输入的格式是否正确,而不是出于安全考虑。因此,采用只使用mysql\u real\u escape\u字符串的方法,然后进入数据库,这是否安全?那么XSS呢?我以为htmlentities会有助于抵御这种攻击,而不是xss攻击。我有一个带有表单的演示,用户添加了html代码,其中包含指向xss javascript文件的链接,该文件将运行恶意代码。我过去常打领带