关于ValidateUser
来源:3-17 api之http middleware的实现与handler收尾(上)
remembers
2020-03-22
var HEADER_FIELD_SESSION = "X-Session-Id"
var HEADER_FIELD_UNAME = "X-User-Name"
func ValidateUser(w http.ResponseWriter, r *http.Request) bool {
uname := r.Header.Get(HEADER_FIELD_UNAME)
if len(uname) == 0 {
sendErrorResponse(w, defs.ErrorNotAuthUser)
return false
}
return true
}
艾文西老师,假如客户端在 HTTP 的请求里加 “X-User-Name” 就能绕过后面一系列的 ValidateUser 的检查。
我的意思是,“X-User-Name” 会不会过于简单,万一被客户端猜出来怎么办?
请问,真实环境中一般怎么处理?
我个人认为要将 “X-User-Name” 改成动态的一串字符串才能阻止客户端搞破坏,请问老师我这样的思路正确吗?
写回答
1回答
-
这里其实只是做了一个简单的判断,user是否为空,等于是一个sample而已。
真实的user name首先会做加密,另外session id要和user id完全匹配才可以鉴权通过,这种情况其实不是很容易构造的,因为你知道别人的user name,并不知道别人的session id,随机字符串猜出来的可能性几乎为0。另外,真实现网请求都是https,从header到body都是全部加密的,一般人没有办法能hack到ssl层的。
112020-03-23
相似问题