【问题标题】:How to handle XSS on NVelocity如何在 NVelocity 上处理 XSS
【发布时间】:2023-11-10 04:11:01
【问题描述】:

Castle Project 功能丰富,包括一些很棒的子项目,使用它进行开发是一种乐趣。

我的团队几乎准备好交付定制的EAM,我们正在完善我们的系统。我们尝试了一些基本的 XSS 攻击并猜测:它们都奏效了。

虽然它会在 Intranet 环境中运行,但我们不希望用户意外破坏整个系统,我们正在研究解决 XSS 问题的解决方案。

NVelocity 默认不会转义任何东西,所以这段代码:

${entity.Field}

字段包含以下内容:

<script>alert('xss!')</script>

会给我们一个很好的 xss 警报。

Microsoft 的 AntiXSS 库看起来不错:可以处理多种可能的 XSS 向量,等等。我们遇到了 AndyPike 的helper,但这个解决方案会让我们重构几千行代码。是的,不好。这在编辑现有实体时不会处理 ActiveRecord/NVelocity 自动绑定。

问题是:使用输出编码技术,是否可以/建议修补 Castle Project 的 NVelocity 引擎?就像他们对 Brail 所做的那样?谁有更好的主意?

谢谢!

PS.: *ers 使用 Castle Project 会使用这样的补丁吗?

【问题讨论】:

  • 简短说明:FormHelper 在将值放入输入字段之前会执行 HtmlEncondig。

标签: xss castle nvelocity


【解决方案1】:

NVelocity 可以自动转义输出,无需更改模板,也无需更改 NVelocity 的代码。

Automatically HTML Encoding NVelocity Output (EventCartridge & ReferenceInsert)

【讨论】:

    【解决方案2】:

    NVelocity 默认不会转义

    哦,亲爱的。那么你有很多代码修复工作要做。

    未能将文本转义到 HTML 中并不是您可以在事后纠正的失败。是的,有些库会过滤掉明显的错误输入,但它们只是隐藏了问题,而且不是很好。鉴于浏览器可以接受的各种奇怪的结构,总会有办法通过它们偷偷不良 HTML,同时它们会给你误报 - 例如,这篇文章将被阻止讨论标签 &lt;script&gt; .

    在您解决真正的问题之前,它们充其量只是一个临时贴膏药。

    【讨论】:

    • 你的“例如”是什么意思,你的帖子会被屏蔽?在将值插入 HTML 时转义值会给您带来与 SO 中几乎相同的东西。不会吗?
    • 是的。如果您在将文本添加到 HTML 时对其进行转义,那么您做对了。我的意思是,如果 SO 做错了(就像 NVelocity 显然是这样),然后试图通过使用“反 XSS”输入过滤器之一来掩盖它,它会产生负面的副作用,比如阻塞或破坏像我们这样谈论&lt;script&gt; 的有效用户输入。以及实际上并不防水。
    • NVelocity 在获取输入值或将其添加到 HTML 时不会转义任何内容。我试图让 NVelocity 默认呈现转义值,但这将是一个漫长的过程......
    • 确实如此。修复没有输出转义的旧应用程序是一项漫长而乏味的任务,但这是最终能够正常工作的唯一方法。 (在获取输入值时不应转义。)