Риски безопасности Javascript?
Каковы риски использования Javascript и как их избежать?
Ответы
Ответ 1
Одной из наиболее распространенных ошибок является вставка HTML, позволяющая третьим лицам внедрять JavaScript в ваш контекст безопасности. Это позволяет злоумышленнику контролировать то, что пользователь делает на вашем сайте, полностью нарушая безопасность учетной записи.
Несмотря на некоторый медленный прогресс, пытаясь заставить веб-авторов помнить строки HTML-кодирования, они выводятся на веб-страницы со стороны сервера (например, htmlspecialchars
в PHP), новое поколение webapps использует ту же немую bind-concatenation hacks для создания контента на стороне клиента с помощью JavaScript:
somediv.innerHTML= '<p>Hello, '+name+'</p>';
часто используя jQuery:
$('table').append('<tr title="'+row.title+'"><td>'+row.description+'</td></tr>');
Это так же уязвимо, как и HTML-инъекция на стороне сервера, и авторам действительно нужно прекратить создание контента таким образом. HTML-кодирование текстового содержимого на стороне клиента, но поскольку JS не имеет встроенного HTML-кодировщика, вам придется сделать это самостоятельно:
function encodeHTML(s) {
return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}
somediv.innerHTML= '<p>Hello, '+encodeHTML(name)+'</p>';
Однако обычно лучше использовать доступные методы и свойства DOM, которые устраняют необходимость экранирования:
var p= document.createElement('p');
p.appendChild(document.createTextNode('Hello, '+name);
и с помощью jQuery используйте attr()
, text()
и ярлыки создания:
$('table').append(
$('<tr>', {title: row.title}).append(
$('<td>', {text: row.description})
)
);
Ответ 2
Javascript работает на стороне клиента, поэтому самый большой риск для клиента. Примером риска является то, что их cookie можно было бы украсть, чтобы другой пользователь мог имитировать себя. Общим методом атаки является вставить Javascript на страницу через форму отправки. Чтобы предотвратить это, вы должны убедиться, что вы всегда должным образом избегаете вывода HTML.
Ваша безопасность на стороне сервера должна не зависеть от безопасности Javascript. Вы должны предположить, что ваш злоумышленник может и будет изменять HTML/CSS/Javascript на ваших страницах, чтобы попытаться просмотреть информацию, которая обычно не видна, и они будут отправлять данные на ваш сервер, которые не могут быть отправлены через обычный интерфейс, Чтобы защититься от этого, вы всегда должны проверять все пользовательские входы - рассматривать его как полностью ненадежные данные. Не полагайтесь на предположениях о том, что ваши пользователи отправят вам - всегда явным образом проверяйте предположения, которые вам требуются, чтобы быть правдой.
Ответ 3
Недавно Иоганн-Питер Хартманн отлично отзывался о безопасности Javascript. Это действительно горячая тема, в частности, поскольку Single Page Applications становятся все более популярными. Проверьте его слайды на slideshare. Слайды на немецком языке - насколько я знаю, там еще нет перевода на английский язык.
Ответ 4
Нет никаких рисков. Просто возможные ошибки программиста. Одна из ошибок, о которых я могу думать, заключается в том, чтобы забыть кодировать параметры URL, отправленные на сервер, и получать неправильные значения. Но реальный риск для безопасности - это код сервера, а не javascript.