| « 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
cisaqtMof on Wednesday, January 14, 2026 at 03:01
Организация пассажирских перевозок в Анапе требует профессионального подхода и надежной техники. Компания «Анапа Транспорт» зарекомендовала себя как ответственный перевозчик, предоставляющий услуги аренды автобусов, микроавтобусов и минивэнов с опытными водителями. Более 5000 клиентов доверили свои поездки этой компании — от школьных экскурсий до корпоративных мероприятий и свадеб. Круглосуточная диспетчерская служба, страхование ответственности и своевременная подача транспорта делают сотрудничество комфортным. Узнать больше о тарифах и забронировать автобус можно на <a href=https://anapa-transport.ru/>https://anapa-transport.ru/</a> где представлен весь автопарк компании. Честные цены, чистые салоны и исправная техника — вот что отличает профессионалов своего дела от случайных перевозчиков на рынке транспортных услуг Анапы.
proflinksgrazy on Wednesday, January 14, 2026 at 06:35
Ищете <a href=https://proflinks.ru/>заказать ссылки для продвижения</a>? Ресурс https://proflinks.ru/ представляет экспертное продвижение интернет-проектов с помощью установки вечных надежных ссылок с показателем ИКС от 10. Сервис действует без перерывов, предоставляя стремительное исполнение проектов по разумной стоимости. Клиенты отмечают стабильный прирост внешних ссылок, рост показателей DR и ИКС, а также увеличение трафика уже через несколько дней после размещения. Платформа представляет разнообразные тарифы: от якорных и безъякорных линков до краудовых кампаний и оптимизации пользовательских метрик для продвижения в Яндекс и Гугл.
AnthonyEmurf on Wednesday, January 14, 2026 at 10:24
<a href=https://sonabet.pro/>sonabet.pro</a>
rydossMus on Wednesday, January 14, 2026 at 11:12
Качественные банные веники — основа полноценного оздоровительного отдыха и традиционных русских парных процедур. Магазин предлагает отборную продукцию из березы, дуба и эвкалипта по доступным ценам. Товары проходят тщательный отбор и соответствуют стандартам экологической безопасности для использования. Удобная доставка через пункты выдачи Яндекс Маркета работает по всей Москве и Подмосковью. Подробный каталог и актуальные акции доступны на странице <a href=https://www.parvenik.ru/>https://www.parvenik.ru/</a> для всех покупателей. Оптовые заказы обрабатываются с дополнительными скидками и индивидуальными условиями сотрудничества.
vakatSag on Wednesday, January 14, 2026 at 14:58
Учебный центр парикмахерского искусства Юлии Бурдинцевой в столице организует программы с практикой на живых моделях уже с четвёртого учебного дня. Ищете <a href=https://j-center.ru/nachalo-zanyatij/>курсы парикмахеров</a>? На j-center.ru представлены программы для начинающих и практикующих мастеров: универсальные курсы от 9000 рублей, колористика за 36000 рублей, мужские стрижки и повышение квалификации. Слушатели накапливают незаменимый профессиональный багаж в условиях работающего салона, постигают дамские и мужские модельные стрижки, тонирование, вечерние укладки и передовые технологии. По окончании выдаётся диплом, а лучшим выпускникам предлагается трудоустройство в салоны Москвы и области.
paxuhprofe on Wednesday, January 14, 2026 at 17:34
Доска бесплатных объявлений Напики объединяет продавцов и покупателей по всей России в удобном онлайн-формате. На <a href=https://napiki.ru/>https://napiki.ru/</a> представлено более 3800 объявлений в 1553 рубриках: недвижимость, транспорт, работа, товары для дома, бытовая электроника и услуги. Ресурс разрешает гражданам и организациям выкладывать предложения безвозмездно, а платные инструменты продвижения форсируют сбыт. Посетители обнаруживают привлекательные варианты в родном городе и близлежащих территориях, а открытие персонального каталога укрепляет репутацию предприятия среди заказчиков.
waxyjFramb on Wednesday, January 14, 2026 at 21:11
<a href=https://www.servisemaster.ru/>https://www.servisemaster.ru/</a> - Ремонт стиральных машин, Ремонт стиральных машин в Москве, Ремонт стиральных машин недорого, Ремонт стиральных машин на дому, Ремонт стиральных машин на дому в Москве, Ремонт стиральных машинок.
pisixopag on Thursday, January 15, 2026 at 01:07
Ищете <a href=https://4israel.co.il/ru/jobs/>вакансии в Израиле</a>? Посетите сайт 4israel.co.il/ru/jobs/ и вы найдете большое количество предложений. Легко определите округ Израиля и городской центр, а ресурс продемонстрирует вам все актуальные предложения о занятости. Трудоустройство в Израиле это множество бесплатных предложений - вы точно найдете для себя должность или размещайте свои объявления и получайте ответы соискателей. Наш сайт максимально функциональный для нахождения вакансий и работников. Подробнее на сайте.
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.