如果使用eval(),是否需要清理代码?

时间:2013-01-15 07:32:25

标签: php eval sanitization

我在数据库中存储表单以及表单处理脚本,javascript验证脚本和表单CSS,使用eval()表示PHP代码,所以我的问题是我需要htmlspecialchars()htmlentities()

无论如何我正在使用mysqli_real_escape_string()nl2br()而你并没有警告我如何安全地使用eval()evalevil等等,这是不关心这里的问题,问题是如果我没有使用htmlspecialcharshtmlentities html将会发布,因为它已经发布在数据库中,如<将是<而不是&lt;所以我需要使用这些功能,否则在这种情况下并不是真的需要它们?

1 个答案:

答案 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>