Я читаю 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 не используется на стороне сервераединственное, что может сделать эта атака, - это изменить строку запроса и затем отправить ее на сервер.
Надеюсь, вы понимаете, что я написал и что я хотел бы понять, спасибо, с наилучшими пожеланиями.