PHP инжектиране (защита), блог за уеб програмиране
Ако сте се натъкнали на куп грешки 404, които включват изкривени URL адреси, сякаш там е вмъкната някаква абракадабра, или може би сте видели грешка като тази:
Намерен е нов ред в променлива PHP_SELF, което може да причини възможно инжектиране на „_YOUR_URL_“
Тогава трябва да прочетете тази публикация. Предупреденият е предвъоръжен!
За съжаление не намерих информация за XSS инжектиране чрез PHP_SELF на български, затова тук ще публикувам превод на една статия за пътуване. Така:
$_SERVER['PHP_SELF'] и междусайтови скриптове ============================
Общоприето е, че глобалният PHP масив $_SERVER съдържа основно полета, които не са достъпни за промяна от хакер, т.к. те са "сървър". Това обаче не винаги е вярно, по-специално привидно безобидното поле PHP_SELF може да стане обект на атака.
Помислете за пример за някакъв файл foo.php
Ако просто посетите връзка като http://www.example.com/foo.php, тогава $_SERVER['PHP_SELF'] ще бъде просто /foo.php и всичко ще работи правилно.
Но какво ще стане, ако посетите http://www.example.com/foo.php/”> ? Тогава нашият код ще генерира следния HTML
Това ви позволява да изпълнявате произволен скрипт в контекста на вашия сайт. И това е XSS. Два начина да избегнете това:
- Използвайте $_SERVER['SCRIPT_NAME'] вместо $_SERVER['PHP_SELF']. Това ще даде истинското име на скрипта, който се изпълнява и не може да бъде подправено от хакер.
- Използвайте htmlspecialchars() това трябва да премахне целия зловреден код от URI низовете
Между другото, това е доста неочаквано поведение за мен по две причини: