Возможная атака XSS в скрипте Java

Fortify по запросу показывает мне эту строку кода как возможную проблему XSS

if (window.location.search != '') { window.location.href = window.location.href.substr(0,baseurl.length+1)+'currencyCode='+event.getCurrencyCode()+'&'+window.location.href.substr(baseurl.length+1);
} else { window.location.href = window.location.href.substr(0,baseurl.length)+'?currencyCode='+event.getCurrencyCode()+window.location.href.substr(baseurl.length);
}

Я далеко не эксперт по JavaScript, но мне нужно исправить этот код.

Не могли бы вы помочь?

2 ответа

Я думаю, что Fortify обнаружил, что event.getCurrencyCode() может быть любой строкой длины и может содержать атаку межсайтового скриптинга, которая может отправить ничего не подозревающего пользователя на вредоносный сайт или заставить браузер загружать JavaScript, который делает для пользователя плохие вещи. Вы могли бы рассказать об этом, посмотрев вкладку сведений об обнаружении в инструменте Fortify Audit Workbench.

Предполагая, что потенциально вредоносные данные могут быть предоставлены event.getCurrencyCode, вам нужно, чтобы белый список проверял это значение либо при получении источника, либо здесь в этом коде. Я готов поспорить, что значения спектра кода валюты в этом приложении относительно невелики, и каждая из них имеет ограниченную длину, поэтому прямое значение белого можно присваивать с помощью Javascript, встроенного в функции регулярного выражения.

В настоящее время JavaScript будет с радостью добавлять в этот URL строку практически неограниченной длины, если она предоставляется событием, а с набором символов UTF-8 существует много возможностей, которые может сделать злоумышленник (встроенный JavaScript и т.д.),

Надеюсь это поможет. Удачи.


К сожалению, существующий ответ неверен, а комментарий ivy_lynx на самом деле не затрагивает вопрос.

Fortify On Demand сообщает об уязвимости потока данных. Это случай, когда некоторые данные происходят где угодно, кроме программиста, - и отражается на неосознанном браузере конечных пользователей.

Потенциально опасные данные поступают из:

  • event.getCurrencyCode()

Вы не располагаете достаточным источником информации, чтобы узнать, что это такое, но довольно неплохо предположить, что функция должна возвращать ничего, кроме кода валюты ISO, или, скорее, трех заглавных букв. ("EUR" или "JPY" и т.д.) Примечание. Я делаю здесь большое предположение; Я не вижу код.

Потенциально опасные данные попадают в расположение браузера.

Проблема заключается в том, что разработчик не гарантирует, какое событие будет отправлено, или что неожиданные данные могут отображаться в этом валютном коде.

Простейшим решением является преобразование возвращаемого значения из "event.getCurrencyCode()" в три заглавные буквы. Существует не известная атака, которая может выражаться тремя прописными буквами. Таким образом, вы можете заменить:

  • event.getCurrencyCode()

с

  • /^ [AZ] [AZ] [AZ] $/. Exec (event.getCurrencyCode())

(ссылка: http://www.w3schools.com/jsref/jsref_regexp_exec.asp)

Это правильно построит ваш URL-адрес тогда и только тогда, когда event.getCurrencyCode() разрешит три прописных буквы типа "USD". В противном случае "нуль" войдет в URL-адрес в точке, где ожидался код валюты.

Очевидно, что вам нужно работать с реальным разработчиком JavaScript для реализации такого исправления, чтобы не возникало никаких дополнительных проблем.

licensed under cc by-sa 3.0 with attribution.