一次简单的防接口攻击

代码 我通过打印  request.getHeader("user-agent") 发现都是类似于 Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)这样的值再请求,然后我就想所有接口只要移动端请求成功,其他请求全部拦截,

于是在拦截器下就写了如下代码

if (!(userAgent.indexOf("Android") != -1 || userAgent.indexOf("iPhone") != -1 || userAgent.indexOf("iPad") != -1)) {
            return false;
   }

在本地上测试的时候没问题,一到线上就不起作用了

线上打印了一波 发现request.getHeader("user-agent") 取得值是okhttp-okgo/jeasonlzy,而不是我要的MeiMa/3.3.8 (iPhone; iOS 11.2.2; Scale/3.00)或Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; LLD-AL10 Build/HONORLLD-AL10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30.导致第一个方法失败,有些值还是正确的

后来想到可以在nginx上做手脚,我就给加上了这个配置,

    location / {
              if ($http_user_agent ~* "python|curl|java|wget|httpclient|MSIE|Java|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou
 spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
return 503;
}

 if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

}

这波就行了

你可能感兴趣的:(nginx)