Intereting Posts
Регулярное выражение для 7-12 цифр; может содержать пробел или дефис как я могу связать / использовать PDT с eclipse в ubuntu? terr Правильный способ использования LIKE '% {$ var}%' с подготовленными операторами? Создание новых SQLite DB с PDO обнаруживать метки URL site.com/page.php#anycontent синтаксическая ошибка, неожиданная «функция» на линии 12 ZendFramework – Как создать optgroup и там вариант с помощью помощников вида? Как удалить «public / index.php» в larvel, созданный url? Максимальная длина разрешена в GROUP_CONCAT? Как это передать? определять пользовательские переменные и прямое обращение к переменным в виде части 2 Ячейки ввода автозаполнения / предложения с использованием jQuery или Ajax со вторым ящиком на основе первых выборок с несколькими элементами Безопасная связь между скриптом Flash и PHP PHP-FPM и Nginx rewrite, вызывающие загрузку jquery добавляет поле ввода и сообщение Данные поиска в базе данных PHP и Oracle

Риск использования $ _SERVER или $ _SERVER в формах и ссылках

Есть ли риск использовать $_SERVER['REQUEST_URI'] или $_SERVER['PHP_SELF'] как действие в форме или как href в ссылке?

Если да, то что можно сделать, чтобы облегчить риск?

Вы делаете форму на http://www.example.com/form.php. Через год вы забудете, что URL-адрес просто захватывает любой URL-адрес, на который загружается страница.

В какой-то момент предположим, вы добавили глобальную опцию «удалить все» в своей структуре как часть совершенно другого (слегка нечетного) запроса.

Теперь кто-то отправляет вам эту ссылку: http://www.example.com/form.php?delete_everything=true. Поскольку вы просто захватываете этот URL-адрес и устанавливаете его как действие, это теперь действие в вашей форме. К сожалению. Таким образом, атаки XSS работают в основном таким образом.

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

Как вы обходите это? Hardcode URL! Вы можете включить функцию, которая возвращает URL-адрес. По сути, так решают такие решения, как Symfony или CodeIgniter.

$ _SERVER уязвим для атак XSS и должен быть очищен с использованием htmlspecialchars () перед использованием.

Пример инъекции:

  <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"></form> 

Теперь вызовите форму со следующей инъекцией:

http://www.example.com/form.php/%22%3E%3Cscript%3Ealert ('xss attack')% 3C / script% 3E% 3Cbr% 20class =% 22relevant

Всегда помните, чтобы очищать входные данные … ВСЕГДА!

Это связано с тем, что $_SERVER['PHP_SELF'] и $_SERVER['REQUEST_URI'] можно манипулировать таким образом, чтобы , если вы не избегаете его должным образом , его можно использовать в атаках XSS.

Это стало возможным благодаря тому, что такой URL-адрес будет работать нормально:

 /path/to/index.php/" onmouseover="alert('hi') 

Давайте используем этот код:

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>"> ... </form> 

Он вызывает /path/to/index.php , т. SCRIPT_NAME , но когда вы просто повторяете $_SERVER['PHP_SELF'] он нарушит ваш предполагаемый HTML.

 <form action="/path/to/index.php/" onmouseover="alert('hi')"> ... </form> 

Решения

Во многих случаях использование <form action=""> достаточно, чтобы сделать сообщение формы самому скрипту. В противном случае, если вы знаете, что сценарий называется "bla.php" , тогда установите action="bla.php" .

Не забудьте преобразовать каждое вхождение «$ _SERVER ['PHP_SELF']" в "htmlentities ($ _ SERVER ['PHP_SELF']) на весь ваш скрипт.

Как избежать эксплойтов PHP_SELF http://www.html-form-guide.com/php-form/php-form-action-self.html

Нет, так как любой может изменить href ссылки в любом случае (используя такой инструмент, как Firebug). Конечно, убедитесь, что вы не помещаете какие-либо конфиденциальные данные в эту ссылку.

Всегда проверяйте правильность проверки и анализа данных пользователя, которые вы получаете .