我正在使用Symfony2女巫Sencha Ext JS作为前端.
我发现我的表单容易受到XSS攻击.
我知道,Symfony2有机制,可以保护我们的数据免受这种攻击,但是这种机制主要是使用我不使用的模板.
我从前端字段收集大量数据,然后传递给后端.我希望尽可能少地解决这个问题.
我的目标是在数据到达数据库之前保护我的应用程序.
我有两种选择.
>首先在生命周期事件监听器上添加strip_tag函数,监听数据preFlush.
>其次是在选定的易受攻击字段的实体级别添加strip_tags.
由于代码数量的原因,这两种选择对我来说都不够.
是否可以在Sencha前端添加一些代码?
我不知道该怎么做.
谢谢你的建议!
最佳答案 如果您不使用模板引擎(我强烈建议为了防止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.