以下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, '&').replace(/</g, '<').replace(/"/g, '"').replace(/>/g, '>');
}
在服务器端执行所有检查是修复XSS的解决方案。但是,我想知道上述编码是否有助于防止XSS。
答案 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
。