Умный злоумышленник будет проверять необработанные заголовки состояния и искать любые несоответствия, которые могут указывать, было ли что-то «естественным» 404 или нет.
Например, версия Apache на моем сервере отправляет обратноследующие заголовки, если вы запрашиваете файл, которого там нет
HTTP/1.1 404 Not Found
Date: Thu, 06 Jan 2011 18:10:57 GMT
Server: Apache/2.2.17
Content-Type: text/html
Однако, если я настрою страницу PHP для отправки заголовка 404, мой сервер отправит обратно следующие заголовки
HTTP/1.0 404 Not Found
Date: Thu, 06 Jan 2011 18:10:48 GMT
Server: Apache/2.2.17
Connection: close
Content-Type: text/html
Таким образом, нет ничего, что очевидно указывает на то, что именно PHP генерировал заголовки во втором случае, но этот дополнительный заголовок
Connection: close
указывает, что происходит что-то еще.Очень опытные злоумышленники создали профили заголовков по умолчанию для максимально возможного количества веб-серверов и динамических сред выполнения, которые проверяют точное содержимое и порядок заголовков, чтобы определить, какой сервер и технологический стек вы можете использовать .Опытный злоумышленник будет знать (или иметь инструмент, который указывает), что PHP всегда отправляет заголовок Connection: close, который может раскрыть вашу базовую технологию.
Я использую программу командной строки curl
для проверки заголовков.
curl -I 'http://example.com/asfasdfsd'
Вы можете найти больше информации на OWASP wiki .
Аналогично, убедитесь, что необработанный текст, который отправляет ваша страница PHP, соответствует тому, что отправляет ваш сервер apacheдо уровня байтов.Умный злоумышленник будет искать различия в форматировании вывода, чтобы определить, была ли ваша страница «естественной» 404 или нет.