выпрыгнуть из инкапсуляции переменной JS - PullRequest
2 голосов
/ 30 ноября 2011

Я читаю Boook о XSS-атаках, и я нашел пример об уклонении XSS-фильтров, который немного странный (ИМХО).

Это пример текста:

Другая возможная точка внедрения, которая может существовать, - это когда разработчик использует неанизированный пользовательский ввод как часть сгенерированного HTML в элементе сценария.Например:


var query_string = "";
somefunction (query_string);
function somefunction {
...
}

Похоже, у нас есть доступ к внутренней части функции JavaScript.Давайте попробуем добавить несколько кавычек и посмотрим, сможем ли мы выйти из инкапсуляции:


var query_string = "" ";
somefunction (query_string);
function somefunction {
...
}

Это сработало, а также вызвало ошибку JavaScript в процессе, как показано на рисунке 3.38.Давайте попробуем еще раз, но вместо того, чтобы вставлять HTML, давайте использовать прямой JavaScript.Поскольку в любом случае мы находимся в теге сценария, почему бы не использовать его в наших интересах?


var query_string = "»; alert («XSS»); // ";
somefunction (query_string);
function somefunction {
...
}

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

Возвращаясь к моему вопросу: есть ли способ, которым этот тип атаки работает?Например, предположим, что somefunction(query_string) используется для запуска какого-либо SQL-запроса, а query_string - это название продукта для поиска в базе данных.Если внутри функции поиска я создаю sql_query = 'SELECT name FROM table WHERE name = "'+query_string+'"';, я думаю, что нет способа вставить строку с кавычками, чтобы «выпрыгнуть из инкапсуляции», т. Е. Ввод YAY";alert('hi');// не изменит JS на это:

var query_string = [user input, in this case YAY";alert('hi');//]
function abc(query_string){
    sql_query = "select name FROM table WHERE name = 'YAY';
    alert('hi');//
    ....
}

Я не прав?Как вы думаете?Можете ли вы привести простой пример (если это возможно) о том, как такая атака может нанести какой-то ущерб?

Я думал о чем-то вроде интернет-магазина, но предполагая, что JS не используется на стороне сервераединственное, что может сделать эта атака, - это изменить строку запроса и затем отправить ее на сервер.

Надеюсь, вы понимаете, что я написал и что я хотел бы понять, спасибо, с наилучшими пожеланиями.

1 Ответ

2 голосов
/ 30 ноября 2011

Вы должны смотреть только на первую строку. Остальное не входит в игру в этом примере xss. Это плохо выбранный пример. Возьмите этот простой пример

var first_name="<XSS>";

В этом примере <xss> - это пользовательский контент. Так, например, ваш PHP-код выглядит так

var first_name="<? echo $firstName; ?>";

$ firstName взято из какой-то базы данных или чего-то еще, и было сгенерировано пользователем, который ввел его в какое-то текстовое поле. Скажите, что пользователь набрал: ";alert("XSS");//. PHP сгенерирует следующий код

var first_name="";alert("XSS");//";

Довольно напечатано:

var first_name="";
alert("XSS");
//";

Как видите, пользователь смог запустить свой код alert("XSS") в любом браузере других пользователей, посетивших страницу. В этом примере ничего плохого не произойдет, за исключением некоторого окна оповещения, но пользователь может внедрить некоторый код, который получает информацию о куки и отправляет ее на какой-либо сервер, чтобы злоумышленник мог украсть чей-либо сеанс входа в систему.

Эта та же проблема - забывание экранировать пользовательский контент - также применяется для создания запросов sql, но это не относится к этому примеру. Создатель этого примера должен был использовать query_string в своем примере, поскольку это явно сбивает с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...