mysql_real_escape_string
是否足以在大多数情况下清理用户输入?
::编辑::
我主要考虑防止 SQL 注入(inject),但我最终想知道在应用 mysql_real_escape_string 之后我是否可以信任用户数据,或者我是否应该在将数据传递给应用程序和数据库之前采取额外措施来清理数据.
我知道 HTML 字符的清理在哪些方面很重要,但我认为对于信任用户输入没有必要。
T
最佳答案
mysql_real_escape_string
在所有情况下都不够用,但它绝对是非常好的 friend 。 更好的 解决方案是使用 Prepared Statements
//example from http://php.net/manual/en/pdo.prepared-statements.php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
另外,不要忘记 HTMLPurifier 可用于丢弃任何无效/可疑字符。
...........
编辑: 根据下面的评论,我需要发布此链接(在抱歉造成困惑之前我应该这样做)
mysql_real_escape_string() versus Prepared Statements
引用:
mysql_real_escape_string() prone to the same kind of issues affecting addslashes().
Chris Shiflett(安全专家)
关于PHP:mysql_real_escape_string 是否足以清理用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353666/