pg_escape_string或mysql_escape_string是否足以在将数据插入数据库表之前清理字符串?
答案 0 :(得分:3)
“消毒”这个词非常值得怀疑。它暗示了某些角色“不好”并且必须在源头过滤的世界观。这是错误的。
以适当的格式获取文本以进入SQL查询是关于将带外字符转义为其SQL文字形式,而不是删除“坏”字符。如果您想在输入应用程序时验证用户输入(例如,验证电话号码中没有字母,或者删除不需要的控制字符),那就没问题了。但这是一个特定于应用程序的验证问题,与SQL转义或HTML转义有关的问题完全不同。这些是输出阶段的问题。
mysql_escape_string
可能不足以安全地转义文本以包含在SQL字符串文字中。在可能使用某些东亚字符集作为编码的连接或某些非默认SQL语法选项上,它将生成可以允许SQL注入的格式错误的字符串。 mysql_real_escape_string
更好。但是,参数化查询可以避免此问题,并且在可用的情况下首选。
pg_escape_string
使用连接,就像mysql_real_escape_string
一样,所以我希望它是安全的。但仍然是参数!在pg_
中,您获得pg_query_params
,因此没有理由不使用它们。
答案 1 :(得分:1)
对于数据 - 是的。只是不要忘记将它括在引号中。
但参数化查询被认为更好,因为对于普通的PHP程序员来说,转义规则似乎太复杂了。
请注意,转义或参数与标识符或运算符无关。比如,字段名称根本无法清理。转义也无法帮助LIMIT参数。
答案 2 :(得分:0)
没有
盲目调用mysql_real_escape_string
是不够的,以防止SQL注入攻击。从手册:
mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a。
注意:mysql_real_escape_string()不会转义%和_。如果与LIKE,GRANT或REVOKE结合使用,这些是MySQL中的通配符。
答案 3 :(得分:-2)
(见其他地方的评论)
是
答案 4 :(得分:-3)
不。对于xss攻击,您还可以使用HTML Purifier http://htmlpurifier.org/清理输入。