首页 >社区问答列表 >PHP MySQL mysql_real_escape_string可以防mysql注入吗?

PHP MySQL mysql_real_escape_string可以防mysql注入吗?

这里不讨论xss和其他安全漏洞,只考虑mysql注入一种情况。

  • 代言
  • 代言  已被采纳  2016-11-11 11:47:132楼

    你好题主,我来回答一下这个问题。

    首先,PHP语言,不做预处理查询来进行Mysql拼接的话,我们使用mysql_real_escape_string()、addslashes()等函数需要注意几个问题。
    1、这些函数过滤哪些值?

    mysql_real_escape_string():
    \x00
    \n
    \r
    \
    '
    "
    \x1a addslashes():
    单引号(')
    双引号(")
    反斜杠(\)
    NULL

    此时,我们注意到了有共同之处,都过滤了

    '
    "
    \

    于是,我们要注意以下几点:
    PHP自拼接Mysql语句,使用上述函数对入库参数进行过滤时,一定要把入库的参数进行单撇号'""' 过滤,例如:

    $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'";

    数据库格式一定要是utf8,否则很可能因为网页和数据库编码格式不统一造成过滤逃逸问题。

    谢谢。


    +0添加回复

  • 回复