【发布时间】:2011-11-30 18:16:20
【问题描述】:
我正在阅读一本关于 XSS 攻击的书,我发现了一个关于 XSS 过滤器规避的例子,这有点奇怪(恕我直言)。
这是示例文本:
另一个可能存在的注入点是开发人员使用 unsanitized 用户输入作为脚本元素中生成的 HTML 的一部分。例如:
var query_string="";
一些函数(查询字符串);
函数 somefunction {
...
}
脚本>看来我们可以访问 JavaScript 函数的内部。让我们尝试添加一些 引号,看看能不能跳出封装:
var query_string="”";
一些函数(查询字符串);
函数 somefunction {
...
}它成功了,并且在过程中也导致了一个 JavaScript 错误,如图 3.38 所示。 让我们再试一次,但不要尝试注入 HTML,让我们直接使用 JavaScript。因为无论如何我们都在一个脚本标签中,为什么不利用它来发挥我们的优势呢?
var query_string="";alert(“XSS”);//";
一些函数(查询字符串);
函数 somefunction {
...
}
bold 文本是我认为是用户输入的内容,例如来自表单。
回到我的问题:这种攻击有什么方法有效吗?例如,假设somefunction(query_string) 用于运行一些sql 查询,query_string 是要在数据库中搜索的产品名称。如果在搜索函数中我创建sql_query = 'SELECT name FROM table WHERE name = "'+query_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,这种攻击唯一能做的就是修改查询字符串,然后将其提交给服务器..
希望你能理解我写的和我想理解的,谢谢,最好的问候。
【问题讨论】:
-
你为什么不尝试自己运行一些这个脚本呢?
-
你到底为什么要在客户端构建 SQL 查询?
-
这只是为了了解一种可能的攻击类型,显然这不是一件好事。 :)
-
query strings 和 SQL queries 之间存在很大差异。 SQL 查询与您书中的示例无关,因此我认为您混淆了您的术语。
-
XSS 通常是通过 JavaScript 注入完成的,这与 SQL 注入非常相似。两者都有其细微差别,都需要对清理用户输入保持警惕。
标签: javascript html sql xss