网络 > 用nginx+cookie防止简单的抓取/破解骚扰
2015-07-02
最近公司的能从外方访问测试服务器很不稳定。查看日志是有大量的访问日志,以及很多调用wp/dedecms/phpmyadmin默认登录的地址的'破解'访问。
决定家一个简单的过滤,最早准备用basic auth,但为了尽量不干扰 普通客户的访问,尝试用cookie解决。没有cookie的话显示一个通过js设定cookie的页面。有cookie的话显示正常页面。
首先自然是安装nginx,改端口,反代。
配置文件如下 :
server {
listen IP地址:80;
error_page 403 /403.html;
root /errmsg/;
location = /403.html
{
root /errmsg/;
allow all;
internal;
}
location / {
if ( $cookie_antiscanpassword != "password") {
return 403;
}
proxy_pass http://127.0.0.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location = /antiscanpassword/cookie.js {
alias /errmsg/antiscanpassword/cookie.js;
}
location ~*\.(jpg|png|jpeg|gif|js|css|flv|mp4|pdf)$ {
proxy_pass http://127.0.0.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
index index.html index.htm;
}
建立/errmsg/403.html.内容如下:
<html>
<head>
<script src='/antiscanpassword/cookie.js'></script>
<script>
var login=function(){
var date = new Date();
date.setYear(date.getYear()+1);
docCookies.setItem('antiscanpassword','password',Infinity,'/');
if (docCookies.getItem('antiscanpassword')=='password')
{
location.reload(true);
}
}
login();
</script>
</head>
<body>
</body>
</html>
建立 /antiscanpassword/cookie.js,内容见 https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
然后就可以测试了。
nginx里负责判断cookie值,页面负责赋值和刷新。
对各种静态文件不做判断,方便站外应用。
上了一套后感觉测试服务器的内存占用有显著改善。
可以通过curl进行测试。
这个无法防止各种基于浏览器模拟器的爬虫/恶意程序。
但对于普通骚扰还是能提升点难度的。
点击登录