Symfony Twig:允许HTML,但不允许转义脚本 我正在研究一个可能的 XSS攻击向量,用于我的应用程序。

Symfony Twig:允许HTML,但不允许转义脚本 我正在研究一个可能的 XSS攻击向量,用于我的应用程序。,symfony,twig,html-sanitizing,Symfony,Twig,Html Sanitizing,我所拥有的: 带有单个textarea字段的FormType。通常,此字段可以包含html标记 Twig呈现插入数据的模板 我使用该表格插入以下内容: <b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script> 一些有效的HTML文本 警报(“XSS”) 查看这些数据需要转义。在逃避数据方面,我不太熟悉一些策略 1) raw过滤器:完全禁用

我所拥有的:

  • 带有单个
    textarea
    字段的FormType。通常,此字段可以包含
    html
    标记
  • Twig
    呈现插入数据的模板
我使用该表格插入以下内容:

<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
一些有效的HTML文本
警报(“XSS”)
查看这些数据需要转义。在逃避数据方面,我不太熟悉一些策略

1)
raw
过滤器:完全禁用转义->引入可能的XSS

2)
e
过滤器:

  • html
    flavor输出:
    一些有效的html文本警报(“XSS”)
  • js
    flavor输出:
    \x3Cb\x3ESome\x20valid\x20HTML\x20text\x3C\x2Fb\x3E\x0D\x0A\x3Cscript\x20type\x3D\x22text\x2Fjavascript\x22\x3alert\x28\x22XSS\x22\x29\x3C\x2Fscript\x3E
3)
{{var| striptags('
')|raw}
,输出:一些有效的HTML文本警报(“XSS”)

这一个有效,但不知怎么的,我不喜欢它。我在寻找黑名单解决方案,而不是白名单

现在问题是:

是否有任何其他转义策略允许
html
标记,但像
e(“js”)
过滤器那样转义
标记


我应该在表单提交期间或在
Twig
呈现期间“杀死”脚本吗

我建议添加一个新的细枝过滤器,以满足您的需要。

它应该看起来像

{{var | filter_black_listed() }}
在过滤器逻辑中,添加如下内容

{{var | filter_black_listed() }}
class FilterBlackListedExtensions\Twig\u扩展
{
private$blacklistedTags=['script','p'];
公共函数getFilters()
{
返回数组(
新建\Twig\u SimpleFilter('filter\u black\u listed',数组($this,'htmlFilter')),
);
}
公共函数htmlFilter($html)
{
foreach($this->blacklistedTags as$tag){
preg_替换('/()(.*)()/g',''$html);
}
return$html;//以后可能还会应用原始过滤器。
}
公共函数getName()
{
返回“过滤器\黑色\列表\扩展名”;
}
}

如果您无法实现此功能,请告诉我:)

是的,我考虑过编写自己的解决方案:)但是,问题是,这足够安全吗?我在谷歌上搜索了一下,这似乎“足够安全”:)谢谢:)嘿!我只是想告诉你,大约一周前我才实现了自己的过滤器。工作得很漂亮。再次感谢!:)+1 mate,你可以在你的htmlFilter()中使用更安全、更多选项的链接(),我不认为这可以防止点击时出现
和类似属性,但不确定这是否是一个巨大的问题。。。