$_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:

    The filename of the currently executing script, relative to the document root.

    It seems odd that PHP would refer to something like /foo.php/"><script>alert('hello');</script> as a "filename."
  • It's pretty bizarre default behavior that PHP will execute /foo.php for a request of /foo.php/bar/baz.

Tags: php, xss, security | Posted at 11:13 | Comments (6)


Comments

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.

jozifameelm on Tuesday, April 7, 2026 at 15:39

Новини Києва <a href=https://thekyivreview.com/>https://thekyivreview.com/</a> . Новини та актуальна довідкова інформація про місто Київ.

sebiktaurl on Tuesday, April 7, 2026 at 16:08

Юридическая компания «Один к одному» занимается взысканием сложной задолженности, вопросами субсидиарной ответственности и ликвидацией компаний с долгами — делами, недоступными для обычных юристов. Управляющий партнёр Даниил Наймушин включён «Российской газетой» в число лучших юристов России по банкротству, а компания получила высокие оценки «КоммерсантЪ» и рейтинга Право-300. На <a href=https://1k1law.ru/>https://1k1law.ru/</a> можно получить профессиональную консультацию по арбитражным спорам и банкротству — подход команды прогнозируемый и результативный.

satertZob on Tuesday, April 7, 2026 at 16:10

Кровь, арена и большая власть возвращаются в 2025-м: «Спартак: Дом Ашура» — это жёсткая история о человеке, выбравшем интригу вместо меча. Ашур — калека и бывший гладиатор — превращается в мастера манипуляций, плетя заговоры среди патрициев, ланист и рабов Капуи. Ищете <a href=https://spartak-dom-ashura-smotret.net/>спартак смотреть онлайн</a>? Смотреть все 10 серий в хорошем качестве с озвучкой LostFilm и AlexFilm можно на spartak-dom-ashura-smotret.net без регистрации и в любое время. Сериал показывает знакомый мир гладиаторов с неожиданной стороны — глазами того, кто побеждает не силой, а умом.

kelimicidows on Wednesday, April 8, 2026 at 02:18

«Аркейн» по праву считается эталоном современной анимации. События происходят в контрастном мире — между сверкающим Пилтоувером и гибнущим в хаосе Зауном. Судьбы сестёр Вай и Пауэр, выросших в нищете, превращаются в цепочку невозможных выборов и потерь. Ищете <a href=https://arkeyn-smotret.biz/>аркейн смотреть онлайн</a>? Смотреть все 18 серий удобно на arkeyn-smotret.biz — бесплатно в высоком качестве с несколькими вариантами озвучки. Сериал поднимает темы классового неравенства, цены прогресса и личной утраты без лишнего пафоса — жёстко, честно и визуально безупречно.

jidizilwed on Wednesday, April 8, 2026 at 03:01

«Чёрная любовь» — турецкая мелодрама 2015 года про двух людей из противоположных миров, для которых первый взгляд обернулся испытанием длиною в жизнь. Честный и небогатый Кемаль влюбляется в Нихан — девушку из влиятельной семьи, окружённую тайнами и контролируемую женихом-манипулятором Эмиром. Манипуляции, шантаж и предательство разлучают их на годы. Ищете <a href=https://chernaya-lyubov-kinogo.online/>чёрная любовь смотреть онлайн</a>? Все 244 серии двух сезонов смотрите бесплатно на chernaya-lyubov-kinogo.online с русским дубляжом в хорошем качестве. Постаревший и окрепший Кемаль снова оказывается в Стамбуле — и лицом к лицу с Нихан: замолчанная правда всплывает, а любовь, пережившая всё, заявляет о себе с новой силой.

Add a comment

Name:
Email: (optional, not displayed to public)
URL: (do not fill this in — leave blank!)

Comment: