mysql_real_escape_string在大多数情况下是否足以清洁用户输入?
mysql_real_escape_string
::编辑::
我主要是在考虑防止SQL注入,但是我最终想知道在应用mysql_real_escape_string之后我是否可以信任用户数据,或者在将数据传递给应用程序和数据库之前是否应该采取额外的措施来清理数据。
我看到清理HTML字符的位置很重要,但是我认为信任用户输入是不必要的。
Ť
mysql_real_escape_string在所有情况下都不够,但是绝对是一个很好的朋友。该 更好的 解决方案是使用 预处理语句
//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()与预备语句
报价:
mysql_real_escape_string()容易发生影响addslashes()的同类问题。
Chris Shiflett (安全专家)