XSS和内容安全策略


XSS and Content Security Policy

通过阅读XSS(跨站点脚本)预防作弊表,我知道什么是上下文感知转义。

在我的其他一些项目中,我使用了Zend_Escaper,但我想知道,如果我启用了内容安全策略,而不允许unsafe-inline用于JavaScript(脚本)和CSS(样式),那么使用htmlspecialchars()来防止XSS是否足够。在我看来,这消除了PHP文件本身中的JS和CSS上下文。

假设我不需要输出不受信任的HTML数据,只需要输出HTML中的和HTML属性中的<em。>

我真的很想远离像Twig和Smarty这样的模板框架。

否。并非所有浏览器都支持CSP。许多人使用较旧的浏览器。CSP目前对那些使用体面浏览器的人来说是一个很好的奖励,你可以从报告策略中得到警告。但这不是你可以依赖的东西。

如果您的用户只有启用了CSP的浏览器,CSP应该可以安全地抵御php中带有htmlspecialchar的XSS,并且如果您设置了正确的策略,则可以为所有输出转义javascript模板的所有输出。这意味着不安全的内联和不安全的eval都不能被允许。您还应该将主机限制为您知道从中加载资源并且信任的主机。仅对您的网站和从中加载资源的任何其他网站使用https,并使用HTTP严格传输安全性来避免中间人攻击。

只允许访问在iframe中使用该主机的页面上的iframe主机。

带有报告uri的报告也是查看您的网站是否存在任何潜在攻击或非CSP浏览器是否会出现问题的必要条件。

更多信息请点击此处。