【发布时间】:2018-07-10 21:17:09
【问题描述】:
我需要添加一个检查以查看域是否与引用者匹配,并且对于 csrf 概念和 servlet 来说是全新的。我想知道是否有办法验证推荐人是否存在
如果referrer 标头不是https://[samedomain]/abc/sso?module=console,则失败。请注意,这里的检查应该非常严格。不能只用“/abc/sso?module=console”比较ends,因为它可以被https://attacker.com/abc/sso?module=console或https://[samedomain].attacker.com/abc/sso?module=console绕过 如果没有失败,继续
我正在寻找关于代码的正确验证,例如可能还需要比较端口和服务器名称。我不是在寻找过于复杂的东西 我已经走到这一步了,
String refererHeader = request.getHeader("referer");
final String PATH = '/abc/sso?module=console',
String host = request.getServerName();
int port = request.getServerPort();
String portstr="";
if(port!=80 || port!= 443){
portstr=":"+port;
}
if (refererHeader == null) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
if (refererHeader != null && host!== null) {
//check if port is not the default ports, in that case construct the url
//append with PATH and compare if the referrer header and this matches
}
任何帮助将不胜感激
【问题讨论】:
-
让我们知道您遇到的问题 - 您可能希望以 servlet filter 和 take a look 开头,以帮助您入门。
-
@stdunbar 谢谢,如果服务器名称和端口匹配,然后请求通过,我正在寻找一些非常简单的东西来比较,请参阅上面我到目前为止的内容,可能这需要一个正则表达式也是?
标签: servlets httprequest csrf