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

Trealdnusty on Monday, March 18, 2024 at 19:12

Клубный дом расположен в Центральном районе г.Воронежа по адресу: г.Воронеж ул.Ушинского 20. На прилегающей территории расположена разноэтажная застройка, от малоэтажных до высотных зданий. Рядом располагается парк им.К.Д.Глинки, а так же Воронежский государственный аграрный университет им.Императора Петра I, общеобразовательная школа и спортивный комплекс с бассейном.Kidwood Деревянный игровой комплекс Березка.
https://hobby.rin.ru/articles/html/23.html
http://gymonline.ru/training/funtikoff/my_himia-natura_train.shtml
https://ntsportpit.ru/products/protein-basic-meal-whey-574813

Установив на участке спортивный комплекс, владелец участка не только побалует ребятишек и привьет им любовь к спорту, но и сам сможет воспользоваться им. Даже если турник на ней невысокий, после долгого стояния в согнутом состоянии для профилактики можно повисеть на турнике, поджав под себя ноги. Читайте также про домик для ребёнка на даче.Спортивный комплекс Малыш с горкой. Хотим дополнительно кольца гимнастические и качель детскую. Позвоните нам.

Trealdnusty on Tuesday, March 19, 2024 at 18:16

Спорт играет главную роль в жизни каждого человека не зависимо от возраста, именно поэтому многие родители, заботясь о здоровье и физическом развитии своего ребенка, приобретают спортивные комплексы для домашнего и уличного использования. Благодаря спортивному комплексу для улицы можно не только приобщить детей к спорту и активному образу жизни, но и развить в детях такие качества, как выносливость, целеустремленность, решительность. Уличные спортивные комплексы позволют выполнять детям весь спектр физических упражнений.Данную категорию, в свою очередь, можно подразделить на комплексы, рассчитанные на установку в квартире и в дошкольных учреждениях.
http://rsou.ru/category/muaj-taj
http://smerch.org/vse-o-thekvondo
http://chesskidsakkerman.com.ua/turnirny-sorevnovaniya

Гимнастический Детский развивающий комплекс для дома «Юнга»Дорогостоящие комбики привлекают внимание опытных гитаристов благодаря наличию дополнительных эффектов. Для начального уровня достаточно Reverb и Distortion, а они имеются в большинстве моделей.

Trealdnusty on Wednesday, March 20, 2024 at 17:21

5) для массового пользования.После получения заявки с вашими контактными данными наши менеджеры свяжутся с вами, чтобы уточнить способ оплаты и доставки заказа по Украине. Вы получите спортивный комплекс от производителя в течение 1-3 рабочих дней после подтверждения заказа.
http://formula1.od.ua/section/printing/
http://wing-chun-name.ru/
http://insidefootballinfo.ru/forums

1. Шведская стенка – от 2.600 руб.Параметры: весь комплекс в*д*ш? 170х280х200 см,высота рукохода 170 см, ширина рукохода 66 см, длина рукохода 150 см, ширина между стойками внизу 130 см, высота площадки перед горкой 100 см, длина и ширина площадки 60*90 см, длина и ширина горки 200*50 см.

Add a comment

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

Comment: