需求:是为了防止别人用postman等工具恶意调用接口;简单来讲就是接口只能在我的网页里调用,其他方式一律不能调用;
因此前后端约定了一套加密方式: 如(MD5('用户手机号'+'约定字符串'+时间戳))
然后我把上面这个结果放在了请求头里,通过key:'testA'传递给后端;
testA: xxxxxxxxxxxx;
如此初步解决了别人恶意调用接口的问题,但是过了几天发现被破解了,原来我搜了在浏览器控制台-源代码如图:
应该怎么规避这个问题;或者我的加密思路不对,应该怎样做能避免这个呢?
需求:是为了防止别人用postman等工具恶意调用接口;简单来讲就是接口只能在我的网页里调用,其他方式一律不能调用;
因此前后端约定了一套加密方式: 如(MD5('用户手机号'+'约定字符串'+时间戳))
然后我把上面这个结果放在了请求头里,通过key:'testA'传递给后端;
testA: xxxxxxxxxxxx;
如此初步解决了别人恶意调用接口的问题,但是过了几天发现被破解了,原来我搜了在浏览器控制台-源代码如图:
应该怎么规避这个问题;或者我的加密思路不对,应该怎样做能避免这个呢?
这个应该先定义什么是恶意调用?比如短时间频繁调用,那应该针对的是这个短时间频繁调用去做处理,限制同一ip短时间的访问次数。
我在控制台进行接口访问算不算恶意的呢?
想防止工具调用有个方法,就是接口在请求后返回一个新的标识符,类似sessionId的,每次请求带上这个sessionId,由后端校验这个sessionId是否合法。这个sessionId短时有效。
md5
改成 mhno1
,但是治标不治本。一般来说,接口只要保证以下几点即可:
27 回答13k 阅读
6 回答2.3k 阅读✓ 已解决
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
6 回答1.1k 阅读
简单的一句话就是:浏览器能拿到的东西,就不能阻止别人去拿。除非你写专用浏览器把密钥内置到浏览器中(都还是存在被破解出来的可能性)
这也是为什么前端永远不可信的原因,后端必须要做安全验证和数据有效性验证。
参阅: