应该使用哪种编码

时间:2013-07-18 15:54:59

标签: javascript jsp xss cross-site

我在同一个jsp文件中有javascript函数,根据链接中传递的参数打开一个新窗口。有人告诉我,我需要进行编码以防止XSS攻击。

     <script language="JavaScript">function openDocWindow(report,index,reportType) {

    link = '/ocs/jsp/single_report_frameset.jsp?      
    report_id='+index+'&id=13740995910316prfXwysgrSGk2Strm7pvxC'+
    index+'&startCount=0'+'&enclosure_id='+index;

    parent.window.open(link,'detail','width=640,height=480,toolbar=no,
    location=no,directories=no,status=yes,menubar=no,scrollbars=
   yes,resizable=yes,alwaysRaised=yes');
   return;
    }

所以我想使用encodeURIComponent()或encodeURI()编码链接可验证但是我需要知道我是否喜欢下面那么它是否能够阻止XSS攻击?

 parent.window.open(encodeURIComponent(link),'detail','width=640,height=480,toolbar=no,
    location=no,directories=no,status=yes,menubar=no,scrollbars=
   yes,resizable=yes,alwaysRaised=yes');
   return;

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要逐件使用encodeURIComponent

function openDocWindow(report,index,reportType) {
  var link = '/ocs/jsp/single_report_frameset.jsp?report_id=' +
    encodeURIComponent(index) + 
    '&id=13740995910316prfXwysgrSGk2Strm7pvxC' +
    encodeURIComponent(index) +
    '&startCount=0&enclosure_id=' +
    encodeURIComponent(index);

    parent.window.open(link,'detail','width=640,height=480,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,alwaysRaised=yes');
    return;
}

我可能只编码一次并重新使用该值;这只是为了说明。基本上,页面中可能包含URI元字符的任何内容都必须进行编码。它是分段完成的,因为你将故意引入元字符,用于它们的用途。

现在,这会阻止XSS吗?一点都不;至少,根据您对XSS的定义,仅针对可能的一小部分攻击。此编码仅适用于URI解释。以这种方式传递恶意用户输入字符串是完全正常的,如果网站在包含它时保护它,那么当它最终返回到您网站的某个页面时,它将同样是恶意的。