使用 Nginx 过滤用户恶意请求
昨天用了加速乐后才发现,原来每天服务器遭受到这么多的攻击啊。。。
幸亏现在php是使用单独的线程池,不会导致跨站的危险。
用了加速乐的屏蔽,还是有点不放心,还是手动让 Nginx 排除掉这些恶意请求把。
首先是可以屏蔽恶意扫描或者请求的ip,用deny参数,比如这样。
deny 218.30.118.79;
## Block SQL injections set $block_sql_injections 0; if ($query_string ~ "union.*select.*\(") { set $block_sql_injections 1; } if ($query_string ~ "union.*all.*select.*") { set $block_sql_injections 1; } if ($query_string ~ "concat.*\(") { set $block_sql_injections 1; } if ($block_sql_injections = 1) { return 403; } ## Block file injections set $block_file_injections 0; if ($query_string ~ "[a-zA-Z0-9_]=http://") { set $block_file_injections 1; } if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") { set $block_file_injections 1; } if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") { set $block_file_injections 1; } if ($block_file_injections = 1) { return 403; }
还需要屏蔽掉相关脚本
## Block common exploits set $block_common_exploits 0; if ($query_string ~ "(<|%3C).*script.*(>|%3E)") { set $block_common_exploits 1; } if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") { set $block_common_exploits 1; } if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") { set $block_common_exploits 1; } if ($query_string ~ "proc/self/environ") { set $block_common_exploits 1; } if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") { set $block_common_exploits 1; } if ($query_string ~ "base64_(en|de)code\(.*\)") { set $block_common_exploits 1; } if ($block_common_exploits = 1) { return 403; }
将以上内容放在一个block.conf中,并在nginx的配置文件中加入
include block.conf
然后测试一下nginx的配置文件是否正确
nginx -t
没问题后就重新加载nginx
nginx -s reload
现在Nginx就能屏蔽用户的恶意请求了。
【声明】本文 使用 Nginx 过滤用户恶意请求 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/10/filter-malicious-user-requests-using-nginx/ , 转载请保留本声明!