【发布时间】:2018-04-16 02:23:26
【问题描述】:
我有一个表格。
我使用htmlspecialchars,所以当用户提交表单时,
// $_POST['test']; equals to "> 5"
$test = htmlspecialchars($_POST['test'], ENT_QUOTES);
...
$stmt->bindParam(':test', $test);
...
当我从数据库中拉出来的时候是这样的:
这不起作用:
if($row['test'] == '> 5') {
echo $row['test']; // "< 5"
}
这行得通:
if($row['test'] == '> 5') {
echo $row['test']; // "< 5"
}
我怎样才能让它工作:if($row['test'] == '< 5') 而不是&gt; 5?我还是想用htmlspecialchars。
【问题讨论】:
-
htmlspecialchars只用于输出,不用于存储。 -
你使用的一件事比另一件事少,而比另一件事多。
-
不要使用
htmlspecialchars。您不知道是否会使用 HTML 上下文,因为您的示例在这里清楚地表明它通常不会。 -
@chris85 那么插入时我应该使用什么来进行 XSS 保护?
-
@JasonBale 准备好的语句对于 SQL 是正确的。 XSS 和 SQL 注入是分开的问题,应该分开处理。为了防止 XSS,您需要转义会影响浏览器渲染的字符。
标签: php mysql database escaping decode