Как остановить внедрение данных в веб-формы?

У меня есть веб-сайт с несколькими страницами с HTML-формами. Но меня засыпают странными данными, которых нет в поле. Пример:

\'\"><svg/onload=(new(Image)).src=\'//rytk88vs0h2tc4yierrvrpgr2i8lwdm1eo8cx\\56burpcollaborator.net\

Но это должно быть

<select><option></option></select>

Это не поле для ввода текста. Так как же человек отправляет странный код выше? Как я могу предотвратить это?

Этот было бы хорошим началом.
Script47 10.04.2018 10:44

Вы должны использовать htmlentities

Khrisna Gunanasurya 10.04.2018 10:45

@ Script47 Хорошее начало для чего?

proofzy 10.04.2018 10:46

@KhrisnaGunanasurya, рекомендуется использовать htmlspecialchars, если вы хотите сохранить символы «значимые» для HTML.

Script47 10.04.2018 10:47

@proofzy, чтобы узнать о безопасности в PHP? На связанной странице содержится обширный массив информации о безопасности и о том, как преодолеть такую ​​небезопасность.

Script47 10.04.2018 10:49

@ Script47 как насчет использования htmlentities($str, ENT_QUOTES);?

Khrisna Gunanasurya 10.04.2018 10:49

Возможный дубликат Как предотвратить XSS с помощью HTML / PHP?

Script47 10.04.2018 10:50

@KhrisnaGunanasurya stackoverflow.com/q/46483/2263631

Script47 10.04.2018 10:52

@ Script47 Понятно, спасибо!

Khrisna Gunanasurya 10.04.2018 10:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
128
2

Ответы 2

\'\"><svg/onload=(new(Image)).src=\'//rytk88vs0h2tc4yierrvrpgr2i8lwdm1eo8cx\\56burpcollaborator.net\

Это попытка XSS-атаки.

So how is the person submitting weird code above?

  1. Форма описывает пользовательский интерфейс.
  2. Браузер создает этот пользовательский интерфейс и представляет его пользователю.
  3. Пользователь вводит данные в форму
  4. Браузер принимает эти данные и форматирует их в HTTP-запрос.

НО ничто не мешает кому-то использовать какой-либо другой метод для создания HTTP-запроса и отправки его на ваш сервер.

How can I prevent this?

Вы не можете контролировать, что люди отправляют на ваш сервер.

Вы можете только принять меры, чтобы предотвратить его вред.

Существует множество документации о том, как защититься от SQL-инъекций, XSS и CSRF (которые являются наиболее распространенными атаками).

Как упоминалось в цепочке комментариев OP, Шпаргалка по безопасности PHP от OWASP - отличный ресурс для общих уязвимостей безопасности.

Script47 10.04.2018 10:54

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

$alloptions = array(1 => 'Option A', 2 => 'Option B');

if (isset($_POST['select'])){
 if (!array_key_exists($_POST['select'], $alloptions)){
  echo 'error';
 }
}

foreach($alloptions as $optionid => $optionname){
 echo '<option value = "'.$optionid.'">'.$optionname.'</option>;
}

Другие вопросы по теме