0

我在同一个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;

谢谢你的帮助!

4

1 回答 1

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 解释。以这种方式将恶意用户输入字符串传回是完全没问题的,如果站点在包含它时不保护它,那么当它最终返回到您站点的某个页面时,它也同样是恶意的。

于 2013-07-18T16:13:33.933 回答