这是否容易受到基于dom的xss的攻击?
Is this vulnerable to dom-based xss?
我不同意安全审计员的意见,即html/js片段是否容易受到XSS的攻击。
简单来说就是:
<html>
<form name="myform" action="page.php" method="post" onsubmit="return validate()">
<input name="field" type="text" size="50" />
<input type="submit" value="Submit" />
</form>
<script>
function validate()
{
var str=document.myform.field.value;
alert("Error in " + str);
return false
}
</script>
</html>
所以,我的审计员说这可能容易受到基于dom的XSS的攻击,但还没有给我一个例子。
我个人认为它不是,因为+内部警告,str是一个字符串,所以它不会被执行。例如,如果有人提供"文档"。然后点击提交,那么警告框就会打印"Error in document "。(而不是实际的Cookie)。
这可能是一个潜在的威胁的唯一方式是,如果您包含了来自不可信来源的不在您控制之下的脚本。
- 恶意脚本可能会覆盖
alert
成为另一个函数。例如,它可以将传递给alert
的数据发送到自己的服务器。 - 恶意脚本可以使用包含
value
属性的对象覆盖document.myform.field
的值。因此,可以使alert
显示一条看起来像另一条错误消息的消息,例如:
验证错误。请登录www.phisherman.com并输入您的用户名和密码。
如果你从不可信的来源链接脚本,你有比上面更大的安全问题。
如果您没有链接到这种不可信的脚本,那么没有,这是不容易受到基于dom的XSS。form.field.value
包含一个字符串。不作为脚本计算,转义字符不起作用,文本框中包含的字符串将在警告窗口中显示。根据您发布的代码,用户在该字段中输入的任何内容都不会被用来损害您的服务器或损坏您的数据。
我想说,如果您的审计人员关心的是"基于DOM的XSS",即用户可能通过操纵DOM对您的服务器造成伤害,那么您的审计人员对DOM和基于浏览器的JavaScript了解不多。用户可以打开JavaScript控制台并执行各种脚本,包括对服务器的xmlhttprequest,可以使其看起来像是来自您自己的脚本。对于这些类型的攻击,需要在服务器端进行防范。担心表单字段中的用户输入给DOM或UI带来的安全风险是愚蠢的。
这绝对没有XSS问题。
你的"validate()"函数的作用是:
- 通过DOM API,将一个DOM节点的属性(
<input>
元素的"value"属性)的引用复制到一个JavaScript变量中。 - 执行JavaScript字符串连接操作。此时,无论字符串是什么都无关紧要。
- 将结果字符串传递给
window.alert()
。"alert()"函数总是严格地将其参数视为字符串。唯一的"特殊"字符是换行符,它所做的只是导致文本换行到新行。
特别要注意:
window.alert("<script>var u_r_so_hacked = true;</script>");
会像这样显示"标签,尖括号和所有的
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- DOM事件通过JSON转换为java
- 将DOM节点值与字符串Javascript进行比较
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- JS应用程序中基于DOM的XSS保护
- 如何执行简单的基于 DOM 的 XSS 攻击
- 尝试创建一个基于DOM的XSS示例
- 如何使用 ESAPI 解析 JavaScript DOM XSS
- 基于 DOM 的 XSS 在哪里
- 基于DOM的XSS攻击在现代浏览器中仍然可能吗
- 这是否容易受到基于dom的xss的攻击?
- 我如何使用这个dom xss
- 基于 DOM 的 XSS 攻击和 InnerHTML
- 检测DOM XSS攻击