| « 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
purudowRum on Tuesday, May 5, 2026 at 03:45
Ищете где посмотреть сериал Во все тяжкие онлайн? Посетите сайт <a href=https://xn-----dlcbpbgqr8a9ao3o.org/>https://xn-----dlcbpbgqr8a9ao3o.org/</a> - там вы сможете найти все серии всех сезонов. Просмотр онлайн без регистрации и в отличном качестве. Если вы еще не смотрели легендарный сериал - самое время! А если вы являетесь фанатом, то на сайте для вас представлены все самые свежие новости о сериале.
xosaxdaubs on Tuesday, May 5, 2026 at 06:42
«РазВикТрейд» — производитель из Беларуси, ориентированный на изготовление пресс-форм и пластиковых изделий для клиентов двух стран. Производство охватывает полный цикл — начиная с технической документации и заканчивая готовой продукцией на складе заказчика. Ищете <a href=https://press-forma.by/>пластика изделия</a>? На press-forma.by можно оставить заявку и получить расчёт проекта. Производственные мощности на 1000 кв.м. с 24 единицами техники позволяют стабильно отгружать более 1,5 млн изделий каждый месяц. Сотрудничество с компанией позволяет сократить затраты и увеличить маржинальность бизнеса в разы.
mipahoFub on Tuesday, May 5, 2026 at 08:17
Анапа — жемчужина черноморского побережья, и исследовать её по-настоящему можно только за рулём собственного, пусть и арендованного, автомобиля. Сервис <a href=https://auto-arenda-anapa.ru/>https://auto-arenda-anapa.ru/</a> предлагает прокат без залога, без ограничения пробега и с неограниченной страховкой ОСАГО, что делает каждую поездку абсолютно беззаботной. Детское кресло и видеорегистратор включены в комплектацию, а оформление занимает три простых шага: выбрать автомобиль, отправить документы и указать место подачи. Команда профессионалов CarTrip всегда на связи в мессенджерах и готова ответить на любой вопрос. Путешествуйте свободно!
voroxrtRAL on Tuesday, May 5, 2026 at 12:38
Речные прогулки по Москве-реке — один из лучших способов увидеть столицу с совершенно иного ракурса: мимо проплывают Кремль, храм Христа Спасителя и сверкающие башни Москва-Сити. Сервис <a href=https://seayoucruise.ru/>https://seayoucruise.ru/</a> работает с 2018 года и предлагает удобное онлайн-бронирование билетов в несколько кликов без очередей. Актуальное расписание, информация о свободных местах и надёжная система оплаты с защитой данных — всё это делает покупку билета простой и безопасной с любого устройства. Гибкие условия возврата и оперативная поддержка по номеру +7 993 245-44-90 завершают образ сервиса, которому можно доверять!
yaDeyNoump on Tuesday, May 5, 2026 at 12:49
Компания «Уральский профиль» специализируется на производстве и установке пластиковых окон в Перми с гарантией качества. Работа ведётся по принципу «под ключ» — от выезда замерщика до финальной сдачи объекта. Минимальная цена на окна составляет 2128 рублей, а установка занимает не более одного дня. Подробный каталог продукции и актуальные цены размещены на <a href=https://oknabalkonperm.ru/>https://oknabalkonperm.ru/</a> — там же можно оформить заявку онлайн. Каталог включает одно-, двух- и трёхстворчатые конструкции, блоки для балконов, панорамные окна и остекление лоджий. Специалисты выполняют заказы для квартир в кирпичных и панельных домах, а также для деревянных домов, дач и коттеджей.
jibiwtCouro on Tuesday, May 5, 2026 at 14:50
Москва открывается совершенно иначе, когда смотришь на неё с воды: величественные набережные, сталинские высотки и современные небоскрёбы Сити складываются в панораму, которую невозможно увидеть ни из окна метро, ни с автомобильной эстакады. Сервис <a href=https://moscowwaterways.ru/>https://moscowwaterways.ru/</a> предлагает речные прогулки и маршруты по Москве-реке в сезоне навигации 2026 года — с удобным расписанием, регулярными отправлениями каждые 15–30 минут и причалами в шаговой доступности от метро. Это одновременно отдых, впечатления и полная свобода от городских пробок.
tawujBrany on Tuesday, May 5, 2026 at 16:16
Современные геймеры ищут площадки для общения с единомышленниками и обмена опытом. Платформа <a href=https://lolz.live/>https://lolz.live/</a> объединяет тысячи любителей компьютерных игр разных уровней. Здесь каждый находит полезную информацию по любимым играм и жанрам. Форум постоянно развивается и предлагает участникам новые возможности для взаимодействия.
jiguleDelty on Tuesday, May 5, 2026 at 16:51
Медиаагентство Vgolos охватывает основные информационные направления — политику, экономику, бизнес, технологии, здоровье и криминал без фильтрации и редакционных компромиссов. Журналисты издания быстро откликаются на актуальные события и работают с фактами без предположений — от расследований в судебной сфере до анализа потребительских тенденций. Читайте проверенные новости на <a href=https://vgolos.org/>https://vgolos.org/</a> — украинское информационное агентство для аудитории ценящей достоверность и оперативность. Разделы культуры, повседневной жизни и технологий естественно расширяют острую редакционную повестку и превращают портал в полноценный ежедневный медиаресурс.
larapaHep on Tuesday, May 5, 2026 at 23:31
Интернет-магазин «Polyana» специализируется на поставке запчастей и ремней для комбайнов и тракторов ведущих мировых брендов — OPTIBELT, TOYOPOWER, MICHELIN. В каталоге представлены клиновые, вариаторные, поликлиновые и плоские ремни, подшипники, муфты, цепи и рукава высокого давления. Ищете <a href=https://polyana.ru/catalog/remni-optibelt/>ремни optibelt купить</a>? На polyana.ru можно оформить заказ онлайн с доставкой по всей России. Компания ООО «АгроЛига» работает как с розничными покупателями, так и с оптовыми партнёрами, обеспечивая стабильное качество и широкий ассортимент для аграрного сектора.
suvojnproni on Wednesday, May 6, 2026 at 00:27
С 1997 года симферопольская компания «Транзит Медиа» задаёт стандарты рекламного производства в Крыму: широкоформатная полноцветная и УФ-печать, брендирование корпоративного транспорта, изготовление баннеров, вывесок и изделий из акрила — всё это выполняется на собственном оборудовании с использованием качественных европейских материалов. Подробный каталог услуг и актуальные цены производителя размещены на <a href=https://transitmedia.ru/>https://transitmedia.ru/</a>, где можно сразу оформить заявку. Более 25 лет безупречной работы, гарантия на все изделия и услуги, доставка по Симферополю и городам Крыма — весомые аргументы в пользу надёжного партнёра для вашего бизнеса.
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.