我与安全审核员存在分歧,是否有一小部分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的攻击,但还没有给我一个例子。
我个人认为不是,因为+ inside警告,str是一个字符串所以它不会被执行。例如,如果有人在表单中提供“document.cookie”并点击提交,则警告框将打印“document.cookie中的错误”(而不是实际的cookie)。
答案 0 :(得分:3)
这可能成为潜在威胁的唯一方法是,如果您从不受信任的来源中包含不受您控制的脚本。
alert
覆盖为另一个功能。例如,它可以将传递给alert
的数据发送到自己的服务器。document.myform.field
属性的对象覆盖value
的值。因此可以使alert
显示看起来像不同错误消息的消息,例如:身份验证错误。请访问www.phisherman.com并输入您的用户名和密码。
如果您要链接来自不可靠来源的脚本,那么 比上述更多更多的安全问题。
如果你没有链接到没有这种不值得信任的脚本,那么不,这不容易受到基于DOM的XSS的攻击。 form.field.value
包含一个字符串。它不作为脚本进行评估,转义字符无效,文本框中包含的字符串将显示在警报窗口中。用户在该字段中输入的内容均不得用于损害您的服务器或根据您发布的代码损坏您的数据。
我要说的是,如果您的审核员关注“基于DOM的XSS”,用户可能会通过操作DOM来损害您的服务器,那么您的审核员对DOM和基于浏览器的JavaScript知之甚少。用户可以破解打开JavaScript控制台并执行各种脚本,包括XMLHttpRequests到您的服务器,可以使它们看起来像是来自您自己的脚本。需要在服务器上针对这些类型的攻击采取预防措施。担心来自表单字段中用户输入的到DOM或UI 的安全风险是愚蠢的。
答案 1 :(得分:2)
肯定没有XSS问题。
您的“validate()”函数的作用是:
<input>
元素的“value”属性)复制到JavaScript变量。window.alert()
。 “alert()”函数总是将其参数严格视为字符串。唯一的“特殊”字符是换行符,所有这一切都会导致文本换行到新行。特别要注意:
window.alert("<script>var u_r_so_hacked = true;</script>");
将显示“”标签,尖括号和所有。