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 низовете

Между другото, това е доста неочаквано поведение за мен по две причини: