Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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中SQL注入的验证和检测_Php_Mysqli_Sql Injection - Fatal编程技术网

PHP中SQL注入的验证和检测

PHP中SQL注入的验证和检测,php,mysqli,sql-injection,Php,Mysqli,Sql Injection,我是PHP新手,还不熟悉它的工作原理 如果我使用mysqli\u real\u escape\u string()并对SQL查询中的每个变量进行参数化,我可以用is\u numeric()等进行验证吗 创建注射检测系统的最佳方法是什么?只需使用正则表达式验证用户的输入并将其保存在数据库中 参数化查询就足够了,您不需要其他任何东西。您将输入他们“注入”的内容作为字符串,并且数据库中的sql没有什么特别的错误。。。我怀疑苏的数据库中充满了SQL;) 即使通过使用参数化查询或mysql\u real\

我是PHP新手,还不熟悉它的工作原理

  • 如果我使用
    mysqli\u real\u escape\u string()
    并对SQL查询中的每个变量进行参数化,我可以用
    is\u numeric()
    等进行验证吗

  • 创建注射检测系统的最佳方法是什么?只需使用正则表达式验证用户的输入并将其保存在数据库中


  • 参数化查询就足够了,您不需要其他任何东西。您将输入他们“注入”的内容作为字符串,并且数据库中的sql没有什么特别的错误。。。我怀疑苏的数据库中充满了SQL;)

    即使通过使用参数化查询或
    mysql\u real\u escape\u string()
    (而不是
    mysql\u escape\u string()
    )保护变量不被注入,您仍然应该在服务器端验证它们,以确保它们与预期的输入类型匹配。这样,如果他们不这样做,您可以向用户返回一条错误消息,请求重试这些表单字段


    如果使用参数化查询,例如MySQLi提供的预处理语句,则不需要对字符串进行转义。但是,如果不使用参数化查询,则必须对PHP接收到的每个输入参数调用
    mysql\u real\u escape\u string()

    这是一个好问题,我认为避免SQL注入的最佳方法之一是了解如何正确使用


    这些将真正有助于提高应用程序的安全性。

    sql注入的问题是用户将sql数据插入到命令中,而没有验证数据是否符合您的业务规则


    确保所有用户数据都通过mysqli\u real\u escape\u字符串或使用准备好的语句传递是避免问题的最佳方法

    对MySQL的值进行转义只需在以下字符前面添加一个反斜杠:
    NULL
    \n
    \r
    0x1A
    。它不做任何其他事情

    “转义”值在SQL中的使用并不是神奇的安全。转义可以防止特殊字符(如引号)被误解。但是,如果在SQL查询中插入转义值而不将其括在引号中,则您完全没有抓住要点,并且您也不会比其他情况下更安全

    请记住,安全过程是“引用”和“转义”。您应该始终同时使用这两种方法,因为如果没有另一种方法,这两种方法都不安全

    此外,如果您可以绝对保证输入值不包含上述任何字符,那么您还可以确定转义字符串将始终与未转义字符串相同,因此在这些条件下转义没有其他用途

    但更重要的是: 最后,回顾过去,我们意识到SQL从安全角度来看设计得很糟糕,依赖用户正确引用和转义他们的数据是一个非常糟糕的想法


    参数化查询是解决方案,因为它可以安全地将数据与控制结构分离。mysqli可以使用参数化查询,方法是使用后跟。使用此方法时无需转义。您可以确信自己绝对不会受到SQL注入攻击。

    可能重复在提到PDO时可能会重复+1,这比使用这些旧的过程API要好得多