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


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.

bagupEpila on Thursday, January 8, 2026 at 03:38

Ищете строительство каркасного дома под ключ в Краснодаре и Краснодарском крае? Посетите сайт <a href=https://masterim-novostroy.ru/>https://masterim-novostroy.ru/</a> - посмотрите наши проекты и сможете собрать теплый дом за 2 недели! А при необходимости мы полностью берем на себя все этапы — от создания проекта и согласования до финишной отделки и уборки. Узнайте подробнее на сайте о качестве нашей продукции и этапах производства!

wuzehenpaype on Thursday, January 8, 2026 at 06:03

Кастрационно-резистентный рак предстательной железы остается серьезным вызовом для онкологов, но инновационные препараты дают пациентам новую надежду. Энзалутамид представляет собой современный антиандрогенный препарат, который блокирует рецепторы мужских гормонов и тормозит рост опухолевых клеток. Клинические исследования показали увеличение общей выживаемости на 4,8 месяца и снижение риска смерти на 37%. Подробную информацию о механизме действия, дозировках и показаниях можно найти на <a href=https://indenza.com.ru/>https://indenza.com.ru/</a> — специализированном ресурсе для пациентов и врачей. Удобство приема — всего один раз в день стандартная доза 160 мг — делает терапию комфортной, а консультация специалиста помогает контролировать ход лечения.

nefuphjurce on Thursday, January 8, 2026 at 08:20

Сейчас всё больше игроков интересуются различными дополнениями, читами и скриптами для Roblox — с их помощью можно упростить геймплей, добавить новые функции и разнообразить игры. На одном игровом портале <a href=https://joyverse.ru/>https://joyverse.ru/</a> регулярно публикуются свежие скрипты, коды и обзоры на игру Роблокс, которые могут пригодиться как новичкам, так и опытным игрокам.

Derekniz on Thursday, January 8, 2026 at 08:39

Just passing along a useful article <a href=http://119.23.210.103:3000/dallasprosser6/dallas2009/wiki/%25D0%259A%25D1%2583%25D0%25BF%25D0%25B8%25D1%2582%25D1%258C+%25D0%25B4%25D0%25B8%25D0%25BF%25D0%25BB%25D0%25BE%25D0%25BC+%25D0%25BE+%25D1%2581%25D1%2580%25D0%25B5%25D0%25B4%25D0%25BD%25D0%25B5%25D0%25BC.>http://119.23.210.103:3000/dallasprosser6/dallas2009/wiki/%25D0%259A%25D1%2583%25D0%25BF%25D0%25B8%25D1%2582%25D1%258C+%25D0%25B4%25D0%25B8%25D0%25BF%25D0%25BB%25D0%25BE%25D0%25BC+%25D0%25BE+%25D1%2581%25D1%2580%25D0%25B5%25D0%25B4%25D0%25BD%25D0%25B5%25D0%25BC.</a>

hemowisoops on Thursday, January 8, 2026 at 09:41

Маска для осознанных сновидений DreamStalker Expert четвертого поколения от российского производителя оснащена Wi-Fi управлением, двумя датчиками движения глаз, RGB-светодиодами и OLED-дисплеем. Устройство доступно на <a href=https://claps.me/catalog/pribory-dlya-osoznannykh-snov/pribor-dlya-osoznannykh-snovideniy-dreamstalker-expert/>https://claps.me/catalog/pribory-dlya-osoznannykh-snov/pribor-dlya-osoznannykh-snovideniy-dreamstalker-expert/</a> в четырех вариантах с функциями майнд-машины и транскраниальной стимуляции tACS. Прибор предлагает автоматическую запись сновидений, голосовые подсказки и возможность докупки лицензий на дополнительные функции.

KennethNut on Thursday, January 8, 2026 at 11:07

Натяжной потолок позволяет смело играть со световыми сценариями, сохраняет аккуратный вид даже при активной жизни дома, а полотно с микротекстурой подчеркивает стиль; замер занимает около получаса, после чего готовится смета и договор <a href=https://potolki-decarat.ru/>https://potolki-decarat.ru/</a>

Add a comment

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

Comment: