| « Displaying Chinese UTF-8 characters in gvim on Windows | Prosper's insecure bank account management feature » |
$_SERVER['PHP_SELF'] and cross-site scripting
Monday, May 20, 2013
It's tempting to assume that PHP's $_SERVER array mostly contains fields out of the reach of an attacker, since these are "server" variables. However, that's not always the case; in particular, the seemingly innocuous PHP_SELF field can be a vector for cross-site scripting.
For example, consider the following foo.php:
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<!-- ...form elements... -->
</form>
If I visit http://www.example.com/foo.php, $_SERVER['PHP_SELF'] will be /foo.php and everything will work correctly.
But what if I visit http://www.example.com/foo.php/"><script>alert('hello');</script> instead? Then the rendered HTML will be:
<form method="POST" action="/foo.php/"><script>alert('hello');</script>">
<!-- ...form elements... -->
</form>
This allows injection of arbitrary script running under the host site's context, also known as XSS. Two ways to fix this are:
- Use
$_SERVER['SCRIPT_NAME']instead of$_SERVER['PHP_SELF']. The former is the name of the actual script file and can't normally be manipulated by an attacker. - Use htmlspecialchars(), which by default will escape double-quotes and prevent a user-supplied string from breaking out of an HTML attribute context.
By the way, this was pretty surprising behavior to me for two reasons:
- The documentation of PHP_SELF is misleading: The first sentence says:
It seems odd that PHP would refer to something likeThe filename of the currently executing script, relative to the document root.
/foo.php/"><script>alert('hello');</script>as a "filename." - It's pretty bizarre default behavior that PHP will execute
/foo.phpfor a request of/foo.php/bar/baz.
Comments
dodekmex on Monday, April 20, 2026 at 19:10
Drinks Dubai Delivery — сервис доставки алкоголя в Дубае для туристов и резидентов, которым нужен быстрый и надёжный способ получить напитки без лишних хлопот. В каталоге представлены виски, водка, шампанское, вино, джин, ром, текила, коньяк, пиво и другие позиции — включая Absolut, Bacardi, Glenfiddich и Aperol. Ищете <a href=https://delivery-dubai-now.com>алкоголь в дубае с доставкой</a>? Оформить заказ можно на delivery-dubai-now.com через Telegram или WhatsApp — просто и удобно. Курьер привозит заказ быстро и дискретно непосредственно к месту вашего пребывания.
ciqohellspuse on Monday, April 20, 2026 at 19:36
Выпускной — один из тех редких дней, которые хочется сохранить в каждой детали: взгляды, смех, слёзы радости и первые шаги во взрослую жизнь. Именно поэтому так важно доверить съёмку профессионалам, которые умеют не просто фотографировать, а рассказывать истории. Студия <a href=https://profvideo.ru/vypusknoj/>https://profvideo.ru/vypusknoj/</a> предлагает комплексную фото и видеосъёмку выпускного в Москве и области под ключ: последний звонок, торжественная часть, банкет, монтаж клипа и фильма о классе. Команда берёт на себя всё — от тайминга до сдачи готового материала в строго оговорённые сроки по договору. Никаких сюрпризов, только результат.
xuxophbus on Monday, April 20, 2026 at 20:41
«Фарго» — знаковый американский сериал, превращающий тихую провинцию Миннесоты в эпицентр кровавых и абсурдных событий. Один случайный незнакомец разрушает хрупкий покой маленького городка, втягивая обычных людей в цепь преступлений. Неудачливый страховой агент, харизматичный манипулятор и принципиальная женщина-детектив — каждый тянет в свою сторону в этой мастерски выстроенной истории. Ищете <a href=https://fargo-smotret.net/>фарго все серии</a>? На fargo-smotret.net доступны все 51 серия пяти сезонов в высоком качестве с профессиональными озвучками. Тонкий чёрный юмор, глубокая криминальная драма и повседневный абсурд возводят «Фарго» на вершину лучших сериалов современности.
wineliZes on Tuesday, April 21, 2026 at 00:03
«Самрай» — московская типография, выполняющая полиграфию любой сложности: от визиток и листовок до буклетов, брошюр, книг, плакатов, баннеров, чертежей и фотографий. Компания предлагает широкоформатную печать, производство наклеек, календарей, бейджей, пластиковых карт и табличек, а также нанесение на футболки и кружки. Ищете <a href=https://samray.ru/pechat-na-futbolkah/>сублимационная печать на футболках</a>? На samray.ru представлен полный прайс и технические требования к макетам. Компания самостоятельно выполняет все этапы послепечатной обработки: ламинацию, биговку, тиснение, вырубку и твёрдый переплёт — без субподрядчиков.
kaagisTum on Tuesday, April 21, 2026 at 00:03
«Мы все мертвы» — южнокорейский хоррор Netflix 2022 года: привычная школьная жизнь в считаные часы рушится под натиском зомби-апокалипсиса. Вспышка, начавшаяся в школьной лаборатории, стремительно превращает и учеников, и учителей в агрессивных зомби. Ищете <a href=https://my-vse-mertvy-smotret.net/>мы все мертвы смотреть онлайн</a>? Смотреть сериал онлайн бесплатно во всех озвучках можно на my-vse-mertvy-smotret.net — все 12 серий в высоком качестве. Выжившие подростки заперты в изолированном здании без связи с внешним миром и вынуждены принимать жестокие решения, чтобы продержаться ещё один день. Проект жёстко соединяет зомби-хоррор с подростковой драмой: любовь, предательство и моральный выбор сталкиваются с непрекращающимся ужасом по ту сторону двери.
wujexWex on Tuesday, April 21, 2026 at 01:53
ウェブサイト <a href=https://www.sum77-debatable.com/>https://www.sum77-debatable.com/</a> にアクセスすると、コムドット 事務所 どこ, シルク 身長, ennちゃん, 東海オンエア スタジオコムドット 事務所 どこシルク 身長 ennちゃん 東海オンエア スタジオ コムドット事務所
xariwacaps on Tuesday, April 21, 2026 at 02:18
Мебельная фабрика «Подольск» специализируется на изготовлении кухонь и шкафов-купе по индивидуальным размерам для жителей Москвы и Московской области. Для изготовления используются проверенные материалы и качественная фурнитура гарантирующие долгий срок эксплуатации. Компания берёт на себя все этапы работы: замер помещения, разработку проекта, производство и монтаж готовой мебели. Партнёром фабрики по поставке оборудования выступает <a href=https://mf-podolsk.ru/>https://mf-podolsk.ru/</a> — надёжный поставщик металлообрабатывающих станков и инструментов. Заказать мебель можно через онлайн-конструктор прямо на сайте компании.
David Annis on Wednesday, June 25, 2014 at 06:32
I have used the fact that php will execute /foo.php from a request that contains /foo.php/bar to make search engine friendly URLs because many search engines will not index both wheretodrink.php?answer=bar and wheretodrink.php?answer=home because they fear an infinite set of URLs.