安全的真正的转义字符串在同一个值内是否安全?

时间:2017-09-21 12:24:15

标签: php mysql mysqli

struct tm

而不是

$_GET['id'] = mysqli_real_escape_string($d,$_GET['id']);

$id = mysqli_real_escape_string($d,$_GET['id']); 是否有效,或者是否有可能使mysqli_real_escape_string()仍然危险(SQL注入)?

2 个答案:

答案 0 :(得分:1)

转义取决于数据将被使用的上下文.MySQL真实转义不会对HTML注入,或格式不正确的CSV值或任何其他需要转义字符的文本格式起作用。阅读The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

当您替换$_GET数据时,这意味着您现在所有以下代码都必须专门处理SQL转义数据。如果您有任何代码不能处理SQL,该怎么办?这就是为什么它的可怕做法。

情况更糟,因为您应该简单地使用参数化查询而不是手动转义。见How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

两种方法都是安全的。因为$ _GET / $ _ POST / $ _ REQUEST参数是在PHP甚至到达文件执行之前设置的。

因此,从代码库中可以看出,没有什么能与你的$ _GET数组进行交互。