这是否容易受到基于dom的xss的攻击?

Is this vulnerable to dom-based xss?

本文关键字:dom xss 攻击 是否 易受      更新时间:2023-09-26

我不同意安全审计员的意见,即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()"函数的作用是:

  1. 通过DOM API,将一个DOM节点的属性(<input>元素的"value"属性)的引用复制到一个JavaScript变量中。
  2. 执行JavaScript字符串连接操作。此时,无论字符串是什么都无关紧要。
  3. 将结果字符串传递给window.alert()。"alert()"函数总是严格地将其参数视为字符串。唯一的"特殊"字符是换行符,它所做的只是导致文本换行到新行。

特别要注意:

     window.alert("<script>var u_r_so_hacked = true;</script>");

会像这样显示"标签,尖括号和所有的