2014-01-17 2 views
0

У меня есть страница URL что-то вроде этого: https://site.com/page.aspx?QSVariableName=ValueКак удалить исполняемый JavaScript из переменной QueryString?

Наша команда безопасности повысила уязвимость о том, что если часть Значение вводится с исполняемым JS, то есть что-то вроде:

https://site.com/page.aspx?QSVariableName=Value%27%2balert%281234567890%29%2b%27 (эквивалентно переходу Значение '+ предупреждение (1234567890) +)

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

Как я уже сказал, это не то, что я делаю намеренно, но идентифицируется как уязвимость в коде. Итак, вопрос в том, как я могу убедиться, что QSVariableName использует только значение и игнорирует ненужный код (позволяет сохранить JS только сейчас)?

Сложность, которая приходит мне на ум, это QSVariableName может содержать ЛЮБОЙ код JS, а не только alert(). И он может присутствовать где угодно, а не только в конце. Есть ли способ идентифицировать исполняемый код JS, встроенный в строку?

Это нормально, если значение является плохой «строкой», если оно не содержит ничего исполняемого.

+4

Можем ли мы увидеть код, в котором вы читаете и использовать 'QSVariableName' в сценарии? Это может помочь нам увидеть, как ваш код читает и выполняет JS непосредственно из строки запроса. – citizenslave

+1

Как вы используете asp.net, вы должны прочитать о [Как предотвратить XSS (Cross Site Scripting)] (http://msdn.microsoft.com/en-us/library/ff649310.aspx) –

+0

Citizenslave, I не может делиться точным кодом ... но вот идея. В URL-адресе есть QSVariableName = Value. Существует гиперссылка на странице, чье событие OnClick настроено на вызов функции JS, передав значение «Значение» в качестве одного из параметров. В моем отредактированном описании 1234567890 предупреждается даже до того, как вызывается первая строка функции JS, главным образом потому, что само значение параметра содержит исполняемый JS. Поэтому мне нужно выяснить способ отсечения этого ненужного кода даже до вызова события OnClick. Поэтому метод C#, который идентифицирует действительный JS в строковой переменной, - это то, что я ищу. – Kal

ответ

0

Что делать, если, вместо того чтобы положить QSVariableName непосредственно в атрибут onclick, вы использовали switch/case шаблон, чтобы выбрать функцию, основанную на QSVariableName? Вы также можете сопоставить соответствующие строки запросов с соответствующими функциями с помощью ассоциативного массива. В любом случае, вы бы только обрабатывали QSVariableName как строку и только использовали безопасный и предварительно одобренный JS в своем onclick событии. Недостатком является то, что любой, кто пытается внедрить JS в строку запроса, получит ошибку, но они пытаются взломать ваш сайт ... их пользовательский интерфейс должен страдать соответственно.

Не видя больше кода, я не уверен, что я могу придумать лучшего ответа ...

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