Symfony2 + Twig中的验证(vs)消毒?

Mic*_*ick 33 symfony twig

我需要我的用户在他们的个人资料中输入他们个人网站URI,以便其他用户可以看到并点击它.我担心如果输出没有正确消毒,这可能会导致XSS攻击.

就像下面这个非常简单的架构一样:


在此输入图像描述


我使用完整的堆栈symfony2框架,Doctrine作为ORM和Twig作为模板引擎.我知道Symfony提供了一些出色的验证工具,TWIG提供了自动输出转义(在这种特殊情况下不是必需的)以及一些用于输出消毒的过滤器.

我已经阅读了以下关于symfony2和twig如何处理清理的内容:

Doctrine附带数据库(SQL)注入的清理.除此之外,Symfony2中的控制器级别没有推荐/提供的输入清理.但是,在视图中使用Twig,可以进行输出清理.

例如,在CakePHP中:

数据清理作为实用程序实现,可以从任何地方访问(控制器,组件,模型甚至视图).它遵循一个使用一组固定的预定义清理过滤器的清理所有输入方法.使用专用规则消除特定输入是可能的,但似乎不鼓励.现有规则集中于SQL和HTML注入并过滤掉一般可疑的unicode字符.

1symfony2 + twig用户如何处理输入清理?他们是否完全放弃了输入清理,例如仅依靠验证?或者他们是否编写自己的效用函数来过滤用户输入?或者使用像owasp-esapi-php这样的库?

2symfony2 + twig用户如何处理输出清理?他们只依靠树枝引擎提供的过滤器吗?例如,是否已有任何工具可用于清理用户输入的URI,类似于此

3在这种情况下,您将如何处理数据库存储和显示用户输入的URI,如上例所示,您是否关心输入清理?或者你只会使用输出清理并按原样存储URI?

Zel*_*jko 3

  1. 你根本不用担心输入清理,Doctrine 不受 sql 注入的影响

  2. 默认情况下,所有输出都会被转义。所以即使$text有script标签,它也会被转义;以文本形式可见,但浏览器不执行。如果您想让http://example.com可点击,有 jquery 插件可以为您做到这一点。

  3. 我只会进行验证,有

    new Symfony\Component\Validator\Constraints\Url() ;
    
    Run Code Online (Sandbox Code Playgroud)

可供您使用

  • 抱歉@Zeljko,我不同意,这个约束不能防止 XSS 攻击。[URL 可以包含代码](http://stackoverflow.com/questions/205923/best-way-to-handle-security-and-avoid-xss-with-user-entered-urls)。我将尝试开立赏金,看看专家如何处理此类事情。 (2认同)