Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2易受XSS攻击的漏洞_Php_Security_Symfony_Extjs_Xss - Fatal编程技术网

Php Symfony2易受XSS攻击的漏洞

Php Symfony2易受XSS攻击的漏洞,php,security,symfony,extjs,xss,Php,Security,Symfony,Extjs,Xss,我使用Symfony2 witch Sencha Ext JS作为前端 我发现我的表单容易受到XSS攻击。 我知道,Symfony2有一些机制,可以保护我们的数据免受攻击,但是这些机制大多使用我没有使用的模板 我正在从前置字段收集大量数据,这些数据被传递到后端。我希望尽可能少地解决这个问题 我的目标是在数据进入数据库之前保护我的应用程序。 我有两个选择 首先是在生命周期事件监听器上添加strip_tag函数,该监听器将侦听数据预刷新 第二种方法是在所选易受攻击字段的实体级别上添加strip_标

我使用Symfony2 witch Sencha Ext JS作为前端

我发现我的表单容易受到XSS攻击。 我知道,Symfony2有一些机制,可以保护我们的数据免受攻击,但是这些机制大多使用我没有使用的模板

我正在从前置字段收集大量数据,这些数据被传递到后端。我希望尽可能少地解决这个问题

我的目标是在数据进入数据库之前保护我的应用程序。 我有两个选择

  • 首先是在生命周期事件监听器上添加strip_tag函数,该监听器将侦听数据预刷新

  • 第二种方法是在所选易受攻击字段的实体级别上添加strip_标记

在我看来,这两种选择都是不够的,因为代码太多了

在Sencha前端添加一些代码是否有一个好主意? 我不知道该怎么办


谢谢你的建议

如果您不使用模板引擎(为了防止XSS攻击,我强烈建议使用模板引擎),则需要使用以下方法转义所有用户数据:

htmlspecialchars($string, ENT_QUOTES);
您可以通过实现和其nonce参数来添加另一个安全层,这是一个随机生成的长字符串,需要添加到每个脚本标记中,如下所示:

<script nonce="myRandomString"></script>
这将阻止在现代浏览器中运行外来脚本(即较新版本的Chrome;但CSP 3有望很快在其他浏览器中实现)所以要小心,它不是100%,只是一个安全网。

注意,每个请求的nonce字符串必须不同。
您可以通过Symfony侦听器实现这一点。我写了一份详细的报告。

如果你认为Symfony2存在安全漏洞,你应该立即私下告诉他们,不要在这里报告。然而,vuln更可能是通过您使用Symfony2的方式出现的,在这种情况下,读者可能需要查看您的代码。我的观点是,该机制仅在Symfony2中可用。我的问题是关于Symfony中关于没有模板的XSS攻击的安全策略。你是说也没有php吗?如果你是这个意思,我可以免费使用php。我只需要就应用程序的哪一部分提供建议,我应该添加保护。您有点搞乱了,简化Symfony的表单可以应用验证,从而导致一系列错误报告。由您决定是否使用模板、引发异常或返回错误消息。我能给你的最好建议(但我不是安全专家)是验证任何用户输入。可以使用内置php过滤器完成,例如,请参见
header('Content-Security-Policy', 'script-src 'nonce-myRandomString' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; object-src 'none');