Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跳出JS变量封装_Javascript_Html_Sql_Xss - Fatal编程技术网

Javascript 跳出JS变量封装

Javascript 跳出JS变量封装,javascript,html,sql,xss,Javascript,Html,Sql,Xss,我正在阅读一篇关于XSS攻击的boook,我发现了一个关于XSS过滤器规避的例子,有点奇怪(IMHO) 以下是示例文本: 另一个可能存在的注入点是开发人员使用未初始化的 用户输入作为脚本元素中生成的HTML的一部分。例如: var query_string=“” somefunction(查询字符串) 函数somefunction{ … } 看起来我们可以访问JavaScript函数的内部。让我们试着添加一些 引用并查看是否可以跳出封装: var查询_string=“” somefunct

我正在阅读一篇关于XSS攻击的boook,我发现了一个关于XSS过滤器规避的例子,有点奇怪(IMHO)

以下是示例文本:

另一个可能存在的注入点是开发人员使用未初始化的 用户输入作为脚本元素中生成的HTML的一部分。例如:


var query_string=“”
somefunction(查询字符串)
函数somefunction{

}

看起来我们可以访问JavaScript函数的内部。让我们试着添加一些 引用并查看是否可以跳出封装:


var查询_string=“”
somefunction(查询字符串)
函数somefunction{

}

它工作正常,并在过程中导致JavaScript错误,如图3.38所示。 让我们再试一次,但不要尝试注入HTML,而是直接使用 JavaScript。既然我们是在一个脚本标签中,为什么不利用它为我们带来好处呢


var query_string=“”;警报(“XSS”);/“
somefunction(查询字符串)
函数somefunction{

}

粗体文本是我假设的用户输入,例如从表单中获取的

回到我的问题:这种攻击有没有办法奏效?例如,假设
somefunction(query\u string)
用于运行一些sql查询,而
query\u string
是要在数据库中搜索的产品名称。如果在搜索函数中我创建了
sql\u query='从表中选择名称,其中name=“+query\u string+”
,我认为没有办法注入带引号的字符串来“跳出封装”,即输入
YAY;“alert('hi');//
不会将JS更改为:

var query_string = [user input, in this case YAY";alert('hi');//]
function abc(query_string){
    sql_query = "select name FROM table WHERE name = 'YAY';
    alert('hi');//
    ....
}
我错了吗?你怎么看?你能给我举个简单的例子(如果可能的话)说明这种攻击是如何造成某种损害的吗

我考虑过类似于在线商店的东西,但假设服务器端不使用JS,此攻击唯一能做的就是修改查询字符串,然后将其提交到服务器


希望您能理解我写的内容和我想理解的内容,谢谢,致以最诚挚的问候。

您应该只看第一行。在这个xss示例中,其余部分不起作用。这是一个选择不当的示例。因此,以这个非常简单的示例为例

var first_name="<XSS>";
印刷精美:

var first_name="";
alert("XSS");
//";
正如您所见,用户能够在访问该页面的每个其他用户浏览器中运行其代码
警报(“XSS”)
。在本例中,除了一些警报框外,不会发生任何不好的情况,但用户可能会注入一些代码来获取cookie信息并将其发送到某个服务器,因此攻击者可以窃取某人的登录会话


同样的问题——忘记转义用户生成的内容——也适用于创建sql查询,但这与本例无关。本例的创建者应该在他的示例中使用
query\u string
,因为这显然令人困惑。

为什么不尝试自己运行一些脚本?你到底为什么要这样做在客户端上构造SQL查询?这只是为了了解可能的攻击类型,显然这不是一件好事。:)和之间有很大区别。SQL查询与您书中的示例不相关,因此我认为您混淆了术语。XSS通常通过JavaScript注入完成,这与SQL注入非常类似关于。两者都有细微差别,都要求对用户输入进行清理。我认为作者想说的有点不同。他试图解释如何从未清理的用户输入控制js函数,但我不明白如果不直接打印/回显变量的值,怎么可能做到这一点(如您的示例所示,使用php).也许我错了,但我认为在定义变量时不可能注入一些代码。.你的观点是什么?无论如何,感谢你的有用示例!注入问题只在从一种语言转换到另一种语言时发生,使用strings.PHP生成JS,JS生成SQL查询等。你应该始终使用正确的转义方法,或在处理这些“边界”时清理输入。因此,正如您所说的,一旦定义了变量,转换就已经发生,因此任何进一步的注入都不会发生,除非您进行另一个转换,例如使用变量创建查询。因此,决不要信任用户输入,也不要信任您不支持的脚本设置的变量re是安全的。因此,仅仅输入一个带代码的字符串是无法控制同一语言中的函数的,对吗?控制意味着将函数分成两部分,在原始函数中输入的地方,然后“放弃”“剩下的就是使用输入添加新的恶意代码。再次感谢您耐心地向我解释这些事情,您的提示对我真的很有帮助。不。JS知道变量包含一个字符串。它不会尝试将该字符串作为JS计算。它只是一个内存块。
var first_name="";alert("XSS");//";
var first_name="";
alert("XSS");
//";