2016-08-25 4 views
0

В целях осуществления безопасности CSRF в успокоительных услугах, я последовал за документацию в OWASPчто делает request.getHeader («хозяин») возвращение, когда несколько ног настроены

OWASP предлагает, ниже подхода для обработки CSRF атак (исй URL: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet)

есть два шага, которые мы должны следовать: 1. Проверьте стандартные заголовки проверить запрос такое же происхождение 2. И Проверьте CSRF токен стандартные заголовки

1. Проверьте, чтобы проверить запрос s ame origin: Было предложено проверить устройство хоста по сравнению с referrer. Поскольку в запросе неверно менять заголовки реферера и хоста, проверка того, является ли Referer Contains Host или нет, является первой проверкой, которую мы можем сделать, и я позаботился об этом.

2. Проверить CSRF Токен

Проверка Синхронного маркера является одним из способов ее достижения. Но это работает для приложения с сохранением состояния. Поскольку наше приложение является безстоящим, было предложено OWASP передать пользовательский заголовок и проверить его присутствие на стороне сервера, и я реализовал его.

Я попытался написать код, приведенный ниже, чтобы проверить первую точку

String host = "/"+request.getHeader("host")+"/"; 
String referer = request.getHeader("referer"); 

if(referer!=null && !referer.contains(host)){ 
      LOGGER.info("referer doesnot contain host"); 
      accessDeniedHandler.handle(request, response, new AccessDeniedException(
        "Missing or non-matching CSRF-token")); 
      return; 
     } 

это работало должным образом в моем местном и тест окр, где только одна нога там. Но когда я тестировал его на сцене env, которая имеет две ноги, имена Referer и host - разные.

имя хоста, имеющий имя машины, как

machin002:8080 

, но я ожидал доменное имя, как

sample.domain.com 

Мне нужно настроить доменное имя для этого хоста ли?

ответ

0

Во-первых, ваш реферер не работает.

Говорите заголовок хоста www.example.com для получения законного запроса.

Если злоумышленник отправляет вам запрос на перекрестный поиск из своего собственного домена evil.example.org, вы можете сдать свой чек, отправив запрос по этому адресу: https://evil.example.org/?www.example.com.

Уязвимого код

referer.contains(host) 

Referer будет https://evil.example.org/?www.example.com, который вы можете увидеть содержит www.example.com.

Проверка ссылок - это более слабая форма защиты CSRF из-за разбора таких ошибок, и иногда пользователи отключают реферер в своем браузере для целей конфиденциальности.

Таким образом, вы должны проверить как Origin, так и Referer, однако у бывшего есть its own problems. Если вы не заботитесь о защите старых браузеров, то это хорошее смягчение CSRF.У старых браузеров также могут быть другие ошибки, которые делают их небезопасными, поэтому вы можете утверждать, что пользователь, использующий старый браузер, в любом случае небезопасен.

наше приложение Stateless

Это ставит под вопрос, почему вам нужна CS в первую очередь?

Нужно ли мне настроить доменное имя для этого хоста?

Похоже, вам нужна переменная конфигурации, где вы можете установить ожидаемый хост вы получаете в заголовках referer и origin.