【发布时间】:2016-06-07 08:14:58
【问题描述】:
暂时忽略准备好的语句和其他实际插入数据库的方法,在插入之前清理输入的最佳当前方法是什么?
function filter($s) {
return htmlentities(addslashes($s));
}
或
function filter($t) {
return mysqli_real_escape_string($t);
}
【问题讨论】:
-
在这种情况下
mysqli_real_escape_string但是 将参数绑定到准备好的语句要好得多:stackoverflow.com/questions/60174/… -
mysqli_real_escape_string仍然是更好的方法,但与正确使用准备好的语句相比,它很糟糕。在现代 SQL 应用程序中不应容忍任何形式的字符串转义。 -
htmlentities完全错误。这样做的唯一目的是在网页上显示 HTML 时对其进行转义,它与数据库无关。 -
由于有时需要在页面上输出数据库中的内容,是否应该将
mysqli_real_escape_string和htmlentities一起用于此类数据? -
另外,我看不出这个问题的重点。准备好的语句是唯一防止 SQL 注入的方法,你为什么不想使用它?
标签: php mysql database security sql-injection