gpt4 book ai didi

symfony - Twig:允许 HTML,但转义脚本

转载 作者:行者123 更新时间:2023-12-02 17:32:41 25 4
gpt4 key购买 nike

我正在调查一个可能的 XSS我的应用程序的攻击向量。

我有什么:

  • 带有单个 textarea 的 FormType field 。通常这个字段可以包含 html标签。
  • Twig呈现插入数据的模板。

我使用该表单插入以下内容:

<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>

查看该数据需要转义。在转义数据时,我熟悉的策略很少。

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

2) e过滤器:

  • html flavor 输出:<b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script>
  • js flavor 输出:\x3Cb\x3ESome\x20valid\x20HTML\x20text\x3C\x2Fb\x3E\x0D\x0A\x3Cscript\x20type\x3D\x22text\x2Fjavascript\x22\x3Ealert\x28\x22XSS\x22\x29\x3C\x2Fscript\x3E

3) {{ var|striptags('<br>')|raw }} , 输出:一些有效的 HTML 文本 alert("XSS")

这个有用,但我不喜欢它。我更愿意寻找黑名单解决方案,而不是白名单。

现在问题:

是否有任何其他转义策略允许 html标记但转义 <script>标签如 e("js")过滤器呢?

我应该在表单提交期间还是在 Twig 期间“终止”脚本?渲染?

最佳答案

我建议添加一个满足您需求的新 Twig 过滤器。

应该是这样的

{{var | filter_black_listed() }}

然后在过滤器逻辑中添加类似

的内容
class FilterBlackListedExtension extends \Twig_Extension
{
private $blacklistedTags = ['script', 'p'];

public function getFilters()
{
return array(
new \Twig_SimpleFilter('filter_black_listed', array($this, 'htmlFilter')),
);
}

public function htmlFilter($html)
{
foreach ($this->blacklistedTags as $tag) {
preg_replace('/(<' . $tag . '>)(.*)(<\/' . $tag . '>)/g', '', $html);
}

return $html; // maybe even apply the raw filter also afterwards.
}

public function getName()
{
return 'filter_black_listed_extension';
}
}

如果您无法完成这项工作,请告诉我:)

关于symfony - Twig:允许 HTML,但转义脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com