gpt4 book ai didi

Javascript/jQuery XSS 潜在读取查询字符串

转载 作者:数据小太阳 更新时间:2023-10-29 05:13:42 24 4
gpt4 key购买 nike

我的 javascript 从查询字符串中读取数据,并使用 jQuery.val() 将该数据放入文本框中。

这工作正常,但我想知道这是否可以免受 XSS 攻击?

假设查询字符串看起来像...

site.com?q="javascript:alert(document.cookie)

这会有效地做到:

jQuery.val('"javascript:alert(document.cookie)')

根据我在 IE8/firefox 中的测试,这会设置所见的输入值,但不会进行实际注入(inject)。

如果我先在字符串上运行这个函数:

function htmlEncode(str) {
return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;');
}

然后你会在输入值中看到 "javascript:alert(document.cookie) 这不是我想要的。

使用 jQuery 1.5.2 我想我的问题是 jQuery.val() 是否为您处理 HTML 实体,因此被认为是安全的?

最佳答案

鉴于以下情况:

jQuery("#SomeTextbox").val("new value for SomeTextbox")

val 函数的 jQuery 代码就是这样做的:

this.value = "new value for SomeTextbox";

其中 this 是对 DOM 中的 Text 对象的引用,该对象代表 ID 为“SomeTextbox”的文本框。字符串 "new value for SomeTextbox" 存储为该 DOM 对象的 value 属性。它不会以任何方式进行转换或 sanitizer 。但它也不会被 JavaScript 引擎解析/解释(例如,与 InnerHTML 一样)。因此,无论您对 val 的论点是什么,它都不会“做”任何事情。它只是更改 DOM 中对象的字符串属性的值。所以,是的,这会很安全。

编辑:

以下是一些您可能会觉得有用的附加信息。

一般来说,将某些内容放入文本框中,无论它看起来多么恶意,也无论它是如何到达那里的,只要它留在在文本框中就是“安全的”。但它从那里走向何方很重要。

如果文本框的内容随后在经过解析的 HTML 流中呈现,那么它就不再安全了。一个常见的场景是将文本框的内容存储在数据库中,然后稍后检索它并在浏览器解析为 HTML 的上下文中呈现它。如果重新显示发生在不同用户的上下文中,它会为恶意用户创造机会,将数据输入文本框,以便在未来某个时间访问其他用户的私有(private)信息。

关于Javascript/jQuery XSS 潜在读取查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921707/

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