$_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 (4)


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.

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 серия пяти сезонов в высоком качестве с профессиональными озвучками. Тонкий чёрный юмор, глубокая криминальная драма и повседневный абсурд возводят «Фарго» на вершину лучших сериалов современности.

Add a comment

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

Comment: