今儿个咱来聊聊我在捣鼓项目时遇到的一个小问题——禁止GET方法调用。这事儿还得从头说起。
我这项目没那么多讲究,GET、POST方法都用得挺欢。毕竟方便嘛啥数据都能往里头塞。但后来随着项目越做越大,安全性问题就得重视起来。你想,GET方法直接把参数啥的都挂在URL上头,明晃晃的,谁都能瞅见,这哪行?万一有人搞破坏,那不就麻烦?
琢磨对策
于是我就开始琢磨,得想个法子把这GET方法给禁。遇到问题就喜欢上网查资料,看看别人都是咋弄的。这一查,还真发现不少门道。
有人说,GET和POST都不安全,从传输的角度来说,都是明文的。这话听着吓人,但仔细想想,咱也不能因噎废食。POST方法虽然比GET安全点,但也不是万无一失。而且很多时候,咱就是需要用GET方法来获取数据,这不能一刀切。
还有人提到,Java EE里头有个叫j_security_check的机制,可以用来做身份验证。这玩意儿我之前也听说过,但没咋用过。这回正可以拿来试试。
动手实践
说干就干,我先是在项目里头把那些敏感的接口都梳理一遍,看看哪些是可以用POST方法替代的。能换的,咱就尽量换成POST。这样,至少能减少一部分风险。
然后,对于那些实在没法换的,或者就是用来获取数据的接口,我就开始琢磨怎么禁止GET方法。这里,我主要关注的是怎么在服务器端做文章。毕竟客户端那边咱也没法控制,人家想用啥方法就用啥方法,咱也管不着。
在服务器端,我试几个法子。我想着直接在代码里头判断一下请求方法,如果是GET就直接返回错误。但这法子有点笨,每个接口都得加一段代码,太麻烦。
后来我想到一个更简单的法子。既然咱用的是Java,那就可以利用Java的Web框架来做这事儿。我这项目用的是Spring,里头有现成的配置可以用来限制请求方法。我只需要在配置文件里头,把那些需要保护的接口的允许请求方法设置成POST就行。这样,如果有人用GET方法来访问,服务器就会直接拒绝,连代码都不用改。
最终实现
经过一番折腾,我这项目算是把GET方法给“管”起来。这也不是说就万事大吉,毕竟安全这事儿,没有绝对的。但至少,咱把能做的都做,心里头也踏实多。
这回实践让我对Web安全有更深的认识。也让我明白一个道理:做项目,不能只图方便,还得考虑安全。不然,出问题,后悔都来不及。