0

下面的 Java Script 代码是否容易受到 XSS 攻击?这是从登录页面调用的。如果在页面中发现错误,将再次登录页面并显示错误消息。

if(userName.length==0)
{ 
 initialMsg="Please enter a User Name"; 
 errorMessage+=encodeHTML(initialMsg);
 document.writeln("<form name=\"errForm\" method=\"POST\" action=\"http://loginPageURLGoesHere\">");
 document.writeln("<input type=\"hidden\" name=\"errorMessage\" value=\"" + errorMessage + "\">"); 
 document.writeln("</form>"); 
 document.errForm.submit();
 return false;
}

function encodeHTML(s)
{
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;').replace(/>/g, '&gt;');
}

在服务器端进行所有检查是修复 XSS 的解决方案。但是,我想知道上述编码是否有助于防止 XSS。

4

3 回答 3

1

这取决于 的初始值errorMessage。当您附加到它时,不可能从您的代码中看到它已经包含的内容。编码应该在输出时完成,以防止任何可能的DOM Based XSS

IEdocument.writeln("<input type=\"hidden\" name=\"errorMessage\" value=\"" + encodeHTML(errorMessage) + "\">");

另外,不要忘记编码单引号。

您应该确保在输出之前http://loginPageURLGoesHere正确errorMessage清理 POST 以防止常规XSS

于 2013-08-22T09:48:53.677 回答
0

是的,它确实如此,特别是因为字符串连接中使用的任何内容都不是来自用户输入,所以即使没有encodeHTML,也无法以有用的方式利用它。

于 2013-08-22T09:33:59.237 回答
0

不,它没有帮助。攻击者可以完全绕过运行该 JS 的页面并将受害者直接发送到http://loginPageURLGoesHere.

于 2013-08-22T09:36:53.610 回答