| « 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
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 с русским дубляжом в хорошем качестве. Постаревший и окрепший Кемаль снова оказывается в Стамбуле — и лицом к лицу с Нихан: замолчанная правда всплывает, а любовь, пережившая всё, заявляет о себе с новой силой.
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.