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; } }