Подтвердить что ты не робот

Почему мы должны знать о введении кода в Javascript?

Я просто изучал, почему использование функции eval() является плохим, и я нашел одну причину уязвимости для атак с инъекциями кода (Post: Почему использование JavaScript eval-функции плохое идея?).

Но мой вопрос: неужели нам нужно беспокоиться о введении кода в javascript? Поскольку, если какой-либо пользователь хочет запустить любой JS script для веб-сайта, он может сделать это, запустив консоль.

Итак, мне просто интересно, какой дополнительный вред он может сделать, если кому-то удастся ввести свой код в код javascript?

ИЗМЕНИТЬ
На основании ответа Oleander ниже я нашел один из способов уязвимости, когда у нас есть связь между браузером и сервером через вызовы AJAX. Это имеет смысл. Но у меня могут быть Javascript-программы, которые запускаются только в браузере и не имеют связи с бэкэнд, например калькулятор или простая игра. Итак, мой дополнительный вопрос здесь, есть ли другая причина, которая может сделать эти программы уязвимыми тоже?

4b9b3361

Ответ 1

Проблемы безопасности возникают, когда хакер вводит вредоносный код в запрос JSON, сделанный пользователем, который затем оценивается с помощью eval.

Представьте, что выполняется следующий код

$.get("/get.json", function(data){
  var obj = eval(data) // String to javascript object
});

Ресурс выглядит следующим образом

GET /get.json
{
  some: "data"
}

Но злоумышленник заменяет вышеупомянутое с помощью человека в средней атаке

function(){
  // send window.cookie to attacker
}();

Теперь злоумышленник имеет доступ к сеансу пользователей.

Ответ 2

Хорошо, если ваш код принимает значение из строки запроса и использует его в eval, злоумышленник может побудить их жертву посетить URL-адрес, содержащий строку запроса.

Из OWASP:

<script>
function loadObj(){
 var cc=eval('('+aMess+')');
 document.getElementById('mess').textContent=cc.message;
}

if(window.location.hash.indexOf('message')==-1)
  var aMess="({\"message\":\"Hello User!\"})";
else
  var aMess=location.hash.substr(window.location.hash.indexOf('message=')+8);
</script>

Злоумышленник может отправить электронное письмо, содержащее ссылку, или перенаправить пользователя, посещающего их вредоносный сайт, на URL

http://example.com/page.html?message=<img onerror="alert(xss)">

Затем у вас есть атака XSS на основе DOM.

Если ваша игра без бэкенда находится на сайте с другой конфиденциальной информацией о нем, такой как сеансы пользователя, тогда злоумышленник может украсть файлы cookie сеанса или получить учетные данные. Все зависит от того, к чему имеет доступ JavaScript. То есть, он будет иметь полный доступ к своему домену хостинга, потому что одна и та же политика происхождения ограничит это. Однако, если у вас есть другие чувствительные приложения, тогда они могут быть скомпрометированы. Если нет, то в худшем случае злоумышленник может злоупотреблять доверием, которое пользователь имеет на вашем сайте, изменяя контент или контролируя, что пользователи делают на вашем сайте.