关于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回答

艾文西

2020-03-23

这里其实只是做了一个简单的判断,user是否为空,等于是一个sample而已。

真实的user name首先会做加密,另外session id要和user id完全匹配才可以鉴权通过,这种情况其实不是很容易构造的,因为你知道别人的user name,并不知道别人的session id,随机字符串猜出来的可能性几乎为0。另外,真实现网请求都是https,从header到body都是全部加密的,一般人没有办法能hack到ssl层的。

1
1
remembers
Good Reply !!
2020-03-23
共1条回复

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程