Почему журнал apache запрашивает GET http://www.google.com с кодом 200?
Меня недавно спросили: "Что вызывает такую строку в нашем access.log?"
59.56.109.181 - - [22 / Feb / 2010: 16: 03: 35 -0800] "GET http://www.google.com/ HTTP / 1.1" 200 295 "-" "Mozilla / 5.0 (совместимо; MSIE 5.01; Win2000)"
Мой немедленный ответ: кто-то исследует что-то немного коварное.
Но:
- как? Предположение... короткий скрипт на Perl или Python может легко подключиться и запросить URL с неверным хостом. но не публиковать. Если вы знаете хороший лайнер, мне было бы любопытно. Рассмотрим этот гольф на сегодня:)
- Уязвимости? Что кто-то ищет, когда он делает это, чему он научился и стоит ли это исправлять?
- Нужна ли мне шляпа из фольги, чтобы они не читали мои мысли?
- И для меня реальный вопрос: разве это не ответ 404, а не 200!?
Это на стандартном сервере LAMP (Ubuntu).
3 ответа
Может быть, вы хотите прочитать http://wiki.apache.org/httpd/ProxyAbuse
особенно этот пункт: "Мой сервер правильно настроен не для прокси, так почему же Apache возвращает код состояния 200 (Успех)?", он задает ваш вопрос "Разве это не ответ 404, а не 200!?"
Если Apache Conf в порядке, просто отправка корневой страницы. Это причина, потому что вы получаете код состояния 200.
Я думаю, что это произойдет, если кто-то попытается использовать сервер в качестве прокси. Это сделало бы http://... URL "нормальным" (в отличие от только части пути, которую вы ожидаете от обычного запроса к серверу.)
Что касается кода состояния 200, то... эээ... ну, мой сервер тоже это делает. Кажется, он игнорирует часть http://hostname/ и возвращает результат с локального сервера, используя оставшийся путь. Возможно, вам придется копаться в RFC, чтобы понять, почему это имеет смысл; Я не знаю ответа от случая к случаю.
Предполагая, что вы не используете свой сервер в качестве прокси-сервера, это, вероятно, обычные попытки злоупотребления прокси-сервером , которые регулярно наблюдаются на веб-серверах, подключенных к Интернету.
Запросы, получившие код состояния 200, вероятно, вернули вашу индексную страницу. Вы можете проверить это, используяили.
Предположим, что:
твое имя сервера
site.example.org
;третьи стороны пытаются подключиться и
search.example.com
;твой
/index.html
файл содержит:<!DOCTYPE html> <html> <head><title>It works!</title></head> <body><h1>It works!</h1></body> </html>
Используя curl
Curl, вы можете реконструировать полученные запросы следующим образом:
$ curl site.example.org --request-target http://news.example.net/
<!DOCTYPE html>
<html>
<head><title>It works!</title></head>
<body><h1>It works!</h1></body>
</html>
Используя telnet
telnet, вы можете восстановить полученные запросы следующим образом:
$ telnet site.example.org 80
> GET http://news.example.com/ HTTP/1.1
> Host: news.example.com
>
HTTP/1.1 200 OK
...
Content-Type: text/html
...
<!DOCTYPE html>
<html>
<head><title>It works!</title></head>
<body><h1>It works!</h1></body>
</html>
Если вы получите свойindex.html
в результате это означает, что ваш сервер не настроен как прокси-сервер, и вам не следует беспокоиться об этих запросах.
Если вы действительно получили содержимоеnews.example.com
илиnews.example.net
ваш веб-сервер настроен как прокси. Вы можете отключить это, оставив комментарий к любомуproxy on;
строки в ваших конфигурациях Nginx или отключивmod_proxy
в ваших конфигурациях Apache.
Несколько интересных упоминаний по этому поводу: