В настоящее время я пытаюсь исправить уязвимость сайта, в основном это один из типов атаки «Неправильная обработка ввода».
Допустим, мой сайт www.mywebsite.com и есть сайт хакера www.hacker.com
всякий раз, когда есть запрос, отправляемый www.mywebsite.com с измененным "Host
"заголовок указывает на www.hacker.com, мой сайт создаст перенаправление на www.mywebsite.com вместе с любым URL-адресом. например
Нормальный:
Host: www.mywebsite.com
GET www.mywebsite.com/get/some/resources/
Reponse 200 ok
Взломать:
Host: www.hacker.com (#been manually modified)
GET www.mywebsite.com/get/some/resources/
Response 302
Send another Redirect to www.hacker.com/get/some/resources
Мой веб-сайт работает на Tomcat 7, я попробовал какое-то решение с настройкой виртуального хоста, указав неизвестный хост на defaultlocalhost
которые предполагают ничего не делать. но по какой-то причине он все еще отправляет перенаправление.
Вот мой server.xml
настройка хоста:
<Engine name="Catalina" defaultHost="defaultlocalhost" jvmRoute="jvm1">
<Host name="www.mywebsite.com" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="defaultlocalhost" >
</Host>
Итак, у меня вопрос: на правильном ли я пути, чтобы предотвратить подобные атаки? Если да, что я сделал не так, что все еще не работает? (Конечная цель состоит в том, что если передан не законный Хост, запрос следует отбросить / проигнорировать / вернуть 404, но не перенаправить с 302)
Заранее спасибо.
Больше упоминаний об атаке здесь: http://www.skeletonscribe.net/2013/05/practical-http-host-header-attacks.html
http://projects.webappsec.org/w/page/13246933/Improper%20Input%20Handling
Ну что ж, в конце концов, отвечу на свой вопрос.
После присоединения к списку рассылки пользователей Tomcat (адрес электронной почты для подписки: users@tomcat.apache.org). Парень по имени Андре помог мне решить эту проблему:
в основном то, что я сделал не так, отсутствует appBase
в моем defaultlocalhost
<Host name="defaultlocalhost" appbase="whatever" >
</Host>
Вышеупомянутая конфигурация успешно возвращала статус 404 всякий раз, когда был отправлен незаконный запрос. причина в том, что всякий раз, когда вы не устанавливаете appbase
всегда по умолчанию webapps
поэтому он по сути ничего не сделал с моей исходной конфигурацией.
Надеюсь, это поможет любому, у кого была аналогичная проблема.