Web前后分离开发,防止API接口被恶意调用或攻击。度娘分享了很多种应对场景的方法。总结得比较好的见文章《前后端分离,如何防止API接口被恶意调用或攻击》、《如何防止别人恶意调用API接口》。
本文选用了另外一种常见的配置下载防盗链机制的方法,使用该方式前请仔细阅读《彻底搞清referrer和origin》后,理解应用场景。具体操作记录如下:
- 增加Nginx端配置,使其能够获取到Http头信息Origin、Referer。
proxy_set_header Origin $http_origin; proxy_set_header Referer $http_referer;
- 后端Java来源验证
public static boolean originAuth(HttpServletRequest request) { String referer = request.getHeader("Referer"); String origin = request.getHeader("Origin"); String sitePart = request.getServerName(); if(referer == null || origin == null) { return false; } if (referer != null && !referer.contains(sitePart)) { return false; } if (origin != null && !origin.contains(sitePart)) { return false; } return true; }
因Http协议是无状态的,针对上面的方法也不是完全无破解方案,只是提高了攻击者的难度。在这条接口网络安全的道路上还得持续的斗智斗勇。