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过滤器:完全禁用
- 带有单个
字段的FormType。通常,此字段可以包含textarea
标记html
呈现插入数据的模板Twig
<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
一些有效的HTML文本
警报(“XSS”)
查看这些数据需要转义。在逃避数据方面,我不太熟悉一些策略
1) raw
过滤器:完全禁用转义->引入可能的XSS
2) e
过滤器:
flavor输出:html
一些有效的html文本警报(“XSS”)
flavor输出:js
\x3Cb\x3ESome\x20valid\x20HTML\x20text\x3C\x2Fb\x3E\x0D\x0A\x3Cscript\x20type\x3D\x22text\x2Fjavascript\x22\x3alert\x28\x22XSS\x22\x29\x3C\x2Fscript\x3E
{{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()中使用更安全、更多选项的链接(),我不认为这可以防止点击时出现
和类似属性,但不确定这是否是一个巨大的问题。。。