我使用 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 :
    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

    关于php - Symfony2 易受 XSS 攻击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28526309/

    10-12 17:59
    查看更多