2013-07-18 3 views
0

У меня есть функция javascript в том же файле jsp, который открывает новое окно на основе параметра, переданного по ссылке. Мне сказали, что мне нужно закодировать, чтобы предотвратить атаку 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; 
    } 

Так я думал, чтобы закодировать ссылку veriable с помощью 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; 

Благодарим за помощь!

ответ

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. Это нормально, если вы передаете вредоносную строку ввода пользователя таким образом, и она будет столь же вредоносной, когда она вернется на какую-либо страницу вашего сайта, если сайт не защитит ее, когда она включена.

+0

Благодарим за помощь. Тогда как я могу предотвратить XSS? Я думал использовать ESAPI.encoder(). EncodeForURL (String str), но я не могу передать ссылку на переменную как строковый аргумент методов ESAPI. Он говорит, что связь не может быть решена. Я попробовал это, используя ESAPI parent.window.open (ESAPI.encoder(). EncodeForURL (link.toString()), 'detail', 'width = 640, height = 480, toolbar = no, location = no, directories = no , состояние = да, строка меню = нет, скроллбары = да, изменяемый = да, alwaysRaised = да); –

Смежные вопросы