Используя htmlspeciachars на выходе из базы данных (MySQL), что еще следует учитывать для предотвращения XSS?
Правильно ли, что использование htmlspecialchars на выходе при запуске данных из базы данных (в данном случае MySQL) вы предотвратите XSS? В этом случае HTML будет показан в HTML-документе? Есть ли что-нибудь еще, что вы должны учитывать? Я имею в виду, в каких других случаях вы могли бы быть уязвимы для XSS?
Допустим, у меня есть веб-сайт, где я создал систему входа в систему, чтобы пользователи могли публиковать новые сообщения, и здесь пользователи могут удалять эти сообщения, но функция JavaScript здесь используется с оповещением (), чтобы убедиться, что пользователь действительно хотите удалить эту новость, и если да, то идентификатор новостей передается по URL-адресу по следующей ссылке:
echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>';
Функция Javascript:
//alert deleteNews function deleteNews($newsidfk) { var ans = window.confirm(Are you sure you want to delete this news post?'); if (ans == true) { window.location.href="delete.php?news_id_fk="+$newsidfk; } }
Есть ли что-то еще, что я должен рассмотреть, чтобы предотвратить XSS, или не может быть здесь XSS? Допустим, у меня есть строка istead числа, нужно ли мне кодировать JavaScript, возможно, функцию encodeURI ()?
Правильно ли, что с помощью htmlspecialchars вы предотвращаете запуск сценариев-тегов, тегов ссылок и img-тегов? И вот как работает XSS, потому что тогда кто-то может, например, украсть личную информацию пользователей?
Я узнал, что вы всегда должны санировать при отображении вывода из базы данных, но как насчет ввода, который хранится в базе данных? Должны ли вы также дезинформировать это, или этого достаточно, чтобы использовать подготовленные заявления PDO или что-то еще и как это сделать?
Я читал о том, как HTML обрабатывает эту статью на wiki: http://en.wikipedia.org/wiki/HTML_sanitization