我在数据库中存储表单以及表单处理脚本,javascript验证脚本和表单CSS,使用eval()
表示PHP代码,所以我的问题是我需要htmlspecialchars()
,htmlentities()
?
无论如何我正在使用mysqli_real_escape_string()
和nl2br()
而你并没有警告我如何安全地使用eval()
或eval
是evil
等等,这是不关心这里的问题,问题是如果我没有使用htmlspecialchars
或htmlentities
html将会发布,因为它已经发布在数据库中,如<
将是<
而不是<
所以我需要使用这些功能,否则在这种情况下并不是真的需要它们?
答案 0 :(得分:0)
通用答案:当上下文发生变化时使用转义函数。
将纯文本字符串放入SQL时:Escape for SQL。
将纯文本字符串放入HTML时:Escape for HTML。
将纯文本字符串放入URL时:Escape for URL。
当做上述事情时不止一件事:所有人都以正确的顺序逃脱,并且真的试图找出你是否没有错过上下文的变化。
演示问题:
开始
$param = "foo";
$url = "http://www.example.org/newpage";
结束
<a href="javascript:location='http://www.example.org/newpage?param=foo';return false;">Link</a>