Nginx中防止SQL注入攻击的相关配置介绍
防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义。
对于简单的情况,比如包含单引号',分号;,<,>,等字符可通过rewrite直接重订向到404页面来避免。
用rewrite有个前提需要知道,一般用rewrite进行正则匹配只能匹配到网页的URI,也就是url中?前部分,?以后部分是请求参数。
问号后面的请求参数,在nginx用$query_string表示,不能在rewrite中匹配到,需要用if判断
例如,对于参数中带有单引号的'进行匹配然后定向到错误页面,
/plus/list.php?tid=19&mid=1124' rewrite^.*([;'<>]).*/error.htmlbreak;
直接写这样的一条重写肯定不会正确匹配,因为rewrite参数只会匹配请求的uri,也就是/plus/list.php部分。
需要使用$query_string借助if进行判断,如果查询串种包含特殊字符,返回404。
if($query_string~*".*[;'<>].*"){
return404;
}
下面来分享一个配置文件实例:
server{
##禁SQL注入BlockSQLinjections
set$block_sql_injections0;
if($query_string~“union.*select.*(“){
set$block_sql_injections1;
}
if($query_string~“union.*all.*select.*”){
set$block_sql_injections1;
}
if($query_string~“concat.*(“){
set$block_sql_injections1;
}
if($block_sql_injections=1){
return444;
}
##禁掉文件注入
set$block_file_injections0;
if($query_string~“[a-zA-Z0-9_]=http://”){
set$block_file_injections1;
}
if($query_string~“[a-zA-Z0-9_]=(..//?)+”){
set$block_file_injections1;
}
if($query_string~“[a-zA-Z0-9_]=/([a-z0-9_.]//?)+”){
set$block_file_injections1;
}
if($block_file_injections=1){
return444;
}
##禁掉溢出攻击
set$block_common_exploits0;
if($query_string~“(<|%3C).*script.*(>|%3E)”){
set$block_common_exploits1;
}
if($query_string~“GLOBALS(=|[|%[0-9A-Z]{0,2})”){
set$block_common_exploits1;
}
if($query_string~“_REQUEST(=|[|%[0-9A-Z]{0,2})”){
set$block_common_exploits1;
}
if($query_string~“proc/self/environ”){
set$block_common_exploits1;
}
if($query_string~“mosConfig_[a-zA-Z_]{1,21}(=|%3D)”){
set$block_common_exploits1;
}
if($query_string~“base64_(en|de)code(.*)”){
set$block_common_exploits1;
}
if($block_common_exploits=1){
return444;
}
##禁spam字段
set$block_spam0;
if($query_string~“b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)b”){
set$block_spam1;
}
if($query_string~“b(erections|hoodia|huronriveracres|impotence|levitra|libido)b”){
set$block_spam1;
}
if($query_string~“b(ambien|bluespill|cialis|cocaine|ejaculation|erectile)b”){
set$block_spam1;
}
if($query_string~“b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)b”){
set$block_spam1;
}
if($block_spam=1){
return444;
}
##禁掉user-agents
set$block_user_agents0;
#Don'tdisablewgetifyouneedittoruncronjobs!
#if($http_user_agent~“Wget”){
#set$block_user_agents1;
#}
#DisableAkeebaRemoteControl2.5andearlier
if($http_user_agent~“IndyLibrary”){
set$block_user_agents1;
}
#Commonbandwidthhoggersandhackingtools.
if($http_user_agent~“libwww-perl”){
set$block_user_agents1;
}
if($http_user_agent~“GetRight”){
set$block_user_agents1;
}
if($http_user_agent~“GetWeb!”){
set$block_user_agents1;
}
if($http_user_agent~“Go!Zilla”){
set$block_user_agents1;
}
if($http_user_agent~“DownloadDemon”){
set$block_user_agents1;
}
if($http_user_agent~“Go-Ahead-Got-It”){
set$block_user_agents1;
}
if($http_user_agent~“TurnitinBot”){
set$block_user_agents1;
}
if($http_user_agent~“GrabNet”){
set$block_user_agents1;
}
if($http_user_agent~"WebBench"){
set$block_user_agents1;
}
if($http_user_agent~"ApacheBench"){
set$block_user_agents1;
}
if($http_user_agent~^$){
set$block_user_agents1;
}
if($http_user_agent~"Python-urllib"){
set$block_user_agents1;
}
if($block_user_agents=1){
return444;
}
}