将可能包含撇号的用户输入插入数据库的行业标准是什么?这样的输入将在网页上显示给用户。例如,用户将某些字段更新为“我很酷”。我用这个函数将它插入到我的数据库中:
public function updateDatabase($value) {
$value = mysql_real_escape_string($value);
Database::instance()->query(
'UPDATE myTable
SET myColumn = ' . $value . '
WHERE foo = "bar"'
);
}
数据库现在将存储“我很酷”。要正确并安全地向任何用户显示此值,我必须使用此功能清理它:
public function toSafeDisplay($userGeneratedValue) {
return stripslashes(
htmlentities(
$userGeneratedValue
)
);
}
我担心的是做 stripslashes和 htmlentities我想在网页上显示的所有内容都将占用大量处理器资源。 StackOverflow 上的普遍共识是在插入数据库之前不要执行 htmlentities
操作,以便数据尽可能原始。这将使它以后可以在任何媒体上显示,而不仅仅是网站。所以我们被迫在显示时执行htmlentities
。 stripslashes
也是如此吗?或者是否可以在不引入 SQL 注入(inject)攻击的情况下在更新数据库之前删除撇号之前的所有斜杠?。
最佳答案
这根本不是它的工作原理。如果您在将其读回 php 时将进入插入/更新的撇号转义,则它将不会被转义。如果您希望从数据库中获取 HTML 安全数据,那么在将其放入数据库之前确保其安全。
关于php - 在数据库中存储带撇号的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604824/