Дневник НЕ всегда жизнерадостного придурка
Пишу – значит есть потребность
Black Green Blue Red Gold
RSS
  • Главная
  • О сайте
  • Обратная связь
  • Карта сайта

Про формы в PHP и переменные $_SERVER

IT, web, безопасность, код Прокомментировать

Сегодня хотел бы рассказать про одну брешь в безопасности, которая довольно часто встречается с исходных кодах многих проектов. Это перевод в моей вольной интерпретации и с комментариями статьи Mark Jaquith. Статья написана главным образом для разработчиков плагинов к WordPress, но может быть полезна и для остальных разработчиков на PHP. Речь пойдет про опасность использования переменных $_SERVER['PHP_SELF'] и $_SERVER['REQUEST_URI']. Самый простой пример их использования – атрибут action в формах:

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

Впрочем, часто переменную используют и в ссылках:

<a href="<?php echo $_SERVER['PHP_SELF']' ?>?id=2">link</a>



Марк пишет, что использовать такого рода конструкции небезопасно и ведет к возможности выполнение XSS (cross-site scripting) атаки.
Далее предлагаются такие варианты выхода из ситуации: в случае с формой можно оставить атрибут action просто пустым. По умолчанию, скрипт будет ссылаться сам на себя.

<form action="">

Если же переменная $_SERVER используется в качестве ссылки,то следует пропустить ее через функцию esc_url() (справедливо для WordPress) или жестко зафиксировать адрес скрипта в другой переменной (это уже для всех разработчиков PHP)

<a href="<?php echo esc_url( $_SERVER['PHP_SELF'] . '?id=1' ); ?>">link</a>

или

$script_path = "link"l
<a href="<?php echo esc_url( $script_path . '?id=1' ); ?>">link</a>

Таким образом вы обезопаситесь от XSS атак. Каких? А, например, вот таких: имеем скрипт с параметром $_SERVER['PHP_SELF'] в теге action далее переходим по адресу script.php/”%20onmouseclick=’alert(document.cookie)’ и смотрим результат. Думаю пояснять, что будет в результате не нужно. Пример так же работает и с одинарными кавычками. Кроме того, использование функции htmlentities() в качестве фильтра http заголовка не поможет!

Вывод:
1) Оставляем пустым значение атрибута action в формах
2) По возможности не используем переменные $_SERVER['PHP_SELF'] и $_SERVER['REQUEST_URI']
3) Если используем, то прогоняем через функцию esc_url()

Легкого и безопасного вам программирования!

Google Bookmarks Digg I.ua Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

23 сентября 2009  

Оставить комментарий или два

Security Code:

Кнопки

Читать в Яндекс.Ленте
  • блог браузер вКонтакте говно дневник жизнь игра интернет кино креатифф любовь маршрутки матч музыка мысли мысли вслух немного из жизни общественный транспорт плагин победа проблема просмотр рассказ рассказы реклама россия сайт секс скачать смерть фЫлософский бред файл фильм фото фотография футбол юмор bash.org.ru firefox IE Last.fm linux microsoft Mozilla plugin

    WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.

  • Последние записи

    • Решаем проблему с кодировкой в gedit
    • Правим кодировку в mp3 файлах
    • История одной фотографии
    • И снова техподдержка
    • Разгоняем FireFox
  • Календарь

    Сентябрь 2009
    Пн Вт Ср Чт Пт Сб Вс
    « Авг   Окт »
     123456
    78910111213
    14151617181920
    21222324252627
    282930  
  • Ссылки

    • Мой вишлист
    • Обратная связь

Рубрики
  • IT
    • tips&tricks
    • Ubutuлогия
    • web
    • безопасность
    • Интересное
    • код
    • Новости
    • ссылки
  • Игры
  • немного из жизни
    • идиотизмы
  • Старый Дневник
  • юмор
О сайте

Мой личный блог. IT, истории из жизни,мысли и идеи. неЖЖ.ру.

© 2010 Копирование категорически разрешено. Обратная ссылка приветствуется.

Перевод: wpbot.ru Дизайн: I SOFTWARE REVIEWS