关于网站只能通过特定APP访问该如何做?
发布于 8 年前 作者 im-here 4253 次浏览 来自 问答

现在用nodejs做手游的服务端,为了安全性也做了各方面的验证。 我现在想做的就是,我想除了游戏客户端访问我的api,其他所有访问(例如直接通过浏览器)都是非法的。应该怎么做呢?验证agent吗? 如果是agent的话,要是懂点程序的会不会模拟客户端的agent来访问呢? 第一次做这方面的东西,不知道怎么弄。 另:我和客户端之间是安全方面的协议的,每次请求都会验证是否合法,我现在想把安全性做到更好,所需想实现上面需求。

9 回复

定义header,并采用https。安卓端写进so。当然。。我还是有办法模拟。只要你出安卓端 100%逆向- -。

“不能访问”不是api做的,而是api之前做拦截,比如F5,NGX代理之类. api做的只是“不响应”。

要做到绝对的“授权访问”,只有一个方法,就是“授权认证”,也就是说有一个“登录认证”的过程。只要把登录授权及访问认证的过程做好了才能保证。

所有的单向的验证都是避免不了被“模拟”的结局。

@MiguelValentine 好的,谢谢,我研究研究!

@tim1020 我现在的做法是用户登录的时候会分配一个token存在redis里,有一定有效时间(假如10个小时,当用户从新登录时这个token会刷新),然后客户端每次和我交互的时候都带上这个token,验证token是否正确。现在这样做的问题是 每次请求客户端会带上这个token,那要是有人通过工具抓到这个token的话,也就可以直接做很多操作了,目前还不知道这块应该怎么设计。

研究了各种认证方式,我也是最后用了jwt认证,但是jwt认证也有天生的缺陷,虽然设置了有效期这个条件,但是在有效期内被捕捉到还是可以被别人利用,另外一个就是过期之后如何自动续期.

对非get请求过来的数据进行加密,服务器端进行验证

@imhered 通信链路的安全,只能是靠传输加密来解决了,简单的处理就是走https(虽然现在https也不绝对安全), 但最终还得回到最基本的问题,因为客户端可以被反编,所以你的算法,你的密钥,你的token,都是可以得到的,因此,也不要强求100%的解决(真要彻底解决,估计要考虑像ukey之类的外置硬件,每次访问都动态生成密钥)

@tim1020 用非对称加密,例如RSA

回到顶部