我使用Symfony2女巫Sencha Ext JS作为前端。
我发现我的表单很容易受到XSS攻击。 我知道,Symfony2有一些机制可以保护我们的数据免受这种攻击,但是这种机制主要是使用我不能使用的模板。
我从前端字段收集大量数据,然后传递给后端。我希望尽可能少地解决这个问题。
我的目标是在数据到达数据库之前保护我的应用程序。 我有两种选择。
首先在生命周期事件监听器上添加strip_tag函数,监听数据preFlush。
其次是在选定的易受攻击字段上的实体级上添加strip_tags。
由于代码数量的原因,这两种选择在我看来都不够。
在Sencha前端添加一些代码是否有好主意? 我不知道该怎么做。
感谢您的建议!
答案 0 :(得分:2)
如果您不使用模板引擎(我强烈建议您为了防止XSS攻击),则需要转义所有用户数据:
htmlspecialchars($string, ENT_QUOTES);
您可以通过实施Content Security Policy及其 nonce 参数添加其他安全层 - 它是您需要添加的随机生成的长字符串每个脚本标签如下:
<script nonce="myRandomString"></script>
然后,只需在PHP中设置一个新的CSP头:
header('Content-Security-Policy', 'script-src 'nonce-myRandomString' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; object-src 'none');
这将阻止在现代浏览器中运行外部脚本(即较新版本的Chrome;但很快就会在其他浏览器中实现CSP 3)。 所以要小心,它不是100%,只是一个安全网。
请注意,每个请求上的 nonce 字符串必须不同。 您可以通过Symfony侦听器实现此目的。我写了详细的tutorial on the Symfony implementation of CSP。