这对XSS很容易受到攻击吗?

时间:2013-08-22 09:21:57

标签: javascript security xss

以下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。

3 个答案:

答案 0 :(得分:1)

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

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

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

您应该确保http://loginPageURLGoesHere正确清理发布到它的errorMessage,然后输出以防范常规XSS

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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