我应该在htmlspecialchars中使用ENT_QUOTES还是不使用?

5

我使用的是PHP 5.4.4,以UTF-8编码运行,并且我不确定我是否正确地使用了htmlspecialchars函数。

我的字符串/变量看起来像这样:

$text = "<p><span class='clx'>By:</span> ".htmlspecialchars($foo)."</span></p>";
echo $text;

我需要使用ENT_QUOTES吗?还是只有在必须输出一些东西时才需要使用它,比如:

例如:href="$foo" or id='$foo' ?

目前,我只在闭合的html标签中使用htmlspecialchars,而不是在属性中。

只需在<p>标签和</p>标签之间将变量连接到字符串中即可。

谢谢


每当您想要编码引号以及其他HTML实体时,应使用它。需要澄清的是,何时使用函数/参数没有固定规则。答案只有一个,那就是在需要时使用它。 - Jonathan Kuhn
2个回答

5

通常在将数据从数据库中取出并插入到html元素中时,您应该使用它。这样做是为了防止来自数据的引号关闭值引号并破坏html。


谢谢,我正在使用它来对抗XSS,我的第一个代码片段使用得对吗?... $text= - user2722667
由于我没有在任何属性中插入数据,只是在开放/关闭标签之间插入数据。 - user2722667
1
是的,你做得很对。在你的第一个例子中,ENT_QUOTES是不必要的。 - Andrew Clark
谢谢,现在我明白了 :) - user2722667

5

简短回答:始终如此。

长话短说:我强烈建议阅读OWASP的PHP Top 5PHP Security Cheat Sheet

OWASP Top 5介绍了目前困扰PHP的五个最严重和常见的安全漏洞:

  • 远程代码执行
  • 跨站脚本攻击(XSS)[htmlspecialchars试图防止的]
  • SQL注入
  • PHP配置
  • 文件系统攻击

它展示了常见的错误和解决方案,并值得任何PHP开发者阅读,甚至考虑托管一个实时网站。


2
谢谢提供链接!非常有用。 - user2722667

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接