gpt4 book ai didi

javascript - 使用 HTMLEncode 来显示上传的文本是否足够?

转载 作者:行者123 更新时间:2023-11-29 15:01:44 25 4
gpt4 key购买 nike

我们允许用户上传图片并提供文字说明。用户可以通过 javascript 通过弹出框(实际上是 div )查看此内容。上传的文本是 javascript 函数的参数。我担心 XSS,也发现了 HTMLEncode() 的问题。
我们使用 HTMLEncode 来防范 XSS。不幸的是,我们发现 HTMLEncode() 仅替换了“<”和“>”。我们还需要替换人们可能包含的单引号和双引号。是否有一个函数可以执行所有这些特殊类型的字符,或者我们必须通过 .NET string.Replace() 手动执行此操作?

最佳答案

Unfortunately, we're finding that HTMLEncode() only replaces '<' and '>'.

假设您正在谈论 HttpServerUtility.HtmlEncode , 确实对双引号字符进行编码。由于某种原因,它还将 U+0080 到 U+00FF 范围编码为字符引用。

它不编码的是单引号。有点遗憾,但您通常可以通过在 HTML/XML 中仅使用双引号作为属性值定界符来解决这个问题。在这种情况下,HtmlEncode 足以防止 HTML 注入(inject)。

但是,javascript 在您的标签中,而 HtmlEncode 显然不足以将内容转义为 JavaScript 字符串文字。 JavaScript 编码与 HTML 编码不同,因此如果这是您担心单引号的原因,那么您需要改用 JS 字符串编码器。

(一个 JSON 编码器是一个好的开始,但你会想要确保它编码 U+2028 和 U+2029 字符,令人恼火的是,这些字符在 JSON 中有效但在 JavaScript 中无效。你可能还需要一些如果您在 HTML 上下文中使用 JavaScript,则在此之上进行各种 HTML 转义。这可能会变得很棘手;通常最好通过在纯 HTML 中隐藏您想要的内容来避免这些问题,例如在隐藏的输入或自定义属性中,您可以在其中使用标准的 HTML 转义,然后在 JS 中从 DOM 中读取该数据。)

关于javascript - 使用 HTMLEncode 来显示上传的文本是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071100/

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