В целях осуществления безопасности 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
Мне нужно настроить доменное имя для этого хоста ли?