【问题标题】:Symfony2 vulnerability to XSS AttacksSymfony2 的 XSS 攻击漏洞
【发布时间】:2015-04-16 01:43:04
【问题描述】:

我使用 Symfony2 女巫 Sencha Ext JS 作为前端。

我发现我的表单容易受到 XSS 攻击。 我知道,Symfony2 具有保护我们的数据免受这种攻击的机制,但是这种机制主要使用我不使用的模板。

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

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

  • 首先是在生命周期事件监听器上添加strip_tag函数,即监听数据preFlush。

  • 其次是在选定的易受攻击字段的实体级别上添加strip_tags。

在我看来,这两种选择都不够,因为代码量很大。

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

感谢您的建议!

【问题讨论】:

  • 如果你认为 Symfony2 存在安全漏洞,你应该私下直接告诉他们,不要在这里报告。然而,漏洞更有可能是由于您使用 Symfony2 的方式而出现的,在这种情况下,读者可能需要查看您的代码。
  • 我的意思是该机制仅在 Symfony2 中的完整模板中可用。我的问题是关于 Symfony 中关于没有模板的 XSS 攻击的安全策略。
  • 你的意思是也没有php吗?
  • 如果你是这个意思,我可以免费使用 PHP。我只需要就应用程序的女巫部分提出建议,我应该添加保护。
  • 你有点搞砸了,简化 Symfony 的表单可以应用导致一系列错误报告的验证。由您决定使用模板或引发异常或返回错误消息。我能给你的最好建议(但我不是安全专家)是验证任何用户输入。可以使用内置的 php 过滤器完成,例如参见 php.net/manual/it/function.filter-input.php

标签: php security symfony extjs xss


【解决方案1】:

如果您不使用模板引擎(我强烈建议您使用模板引擎以防止 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 2023-04-07
    • 1970-01-01
    • 2017-09-12
    • 2012-03-10
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多