Nginx防范Sql注入攻击方法总结
3354 点击·0 回帖
![]() | ![]() | |
![]() | 本文章从最简单的Nginx防范Sql注入攻击,到后面对文件安全防止攻击的配置实现,有需要的朋友可参考一下。 通过union all联合查询获取其他表的内容(如user表的用户密码) 基本sql注入原理: 通过union all联合查询获取其他表的内容(如user表的用户密码) 防御原理: 1. 通过以上配置过滤基本的url中的注入关键字; 2.当然,数据库中的用户密码得加密存放 ; 3. php程序进行二次过滤,过滤GET和POST变量中的关键字; 4.生产环境关闭PHP和MySQL的错误信息。 对于简单的情况,比如包含单引号' , 分号;, <, >,等字符可通过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; } SQL注入攻击一般问号后面的请求参数,在nginx用$query_string表示 代码如下复制代码 if($request_uri ~* "(cost()|(concat()") { return 404; } if ($request_uri~* "[+|(%20)]union[+|(%20)]") { return 404; } if ($request_uri ~*"[+|(%20)]and[+|(%20)]") { return 404; } if ($request_uri ~*"[+|(%20)]select[+|(%20)]") { return 404; } if ( $query_string ~*".*[;'<>].*" ){ return404; } 防范sql注入攻击 在虚拟主机server段中加入如下配置: 代码如下复制代码 if ($request_uri~*(.*)(insert|select|delete|update|count|*|%|master|truncate|declare|'|;|and|or|(|)|exec)(.*)$) { rewrite ^(.*) 11 redirect; } 当然我们也可以返回404错误: 代码如下复制代码 if($request_uri ~*(.*)(insert|select|delete|update|count|*|%|master|truncate|declare|'|;|and|or|(|)|exec)(.*)$) { return 404; } 其它一些方法 在配置文件添加如下字段即可 代码如下 server { ##禁SQL注入 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_injections1; } if ($query_string ~ “concat.*(“) { set $block_sql_injections1; } if ($block_sql_injections = 1) { return 444; } ##禁掉文件注入 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_injections1; } if ($query_string ~ “[a-zA-Z0-9_]=/([a-z0-9_.]//?)+”) { set$block_file_injections 1; } if ($block_file_injections = 1) { return444; } ## 禁掉溢出攻击 set $block_common_exploits 0; if ($query_string ~“(<|<).*script.*(>|>)”) { set $block_common_exploits 1; } 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_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_exploits1; } if ($query_string ~ “base64_(en|de)code(.*)”) { set$block_common_exploits 1; } if ($block_common_exploits = 1) { return444; } ## 禁spam字段 set $block_spam 0; 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_spam 1; } 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_spam 1; } if ($block_spam = 1) { return 444; } ##禁掉user-agents set $block_user_agents 0; # Don’t disable wget if you needit to run cron jobs! #if ($http_user_agent ~ “Wget”) { # set$block_user_agents 1; #} # Disable Akeeba Remote Control 2.5 andearlier if ($http_user_agent ~ “Indy Library”) { set $block_user_agents1; } # Common bandwidth hoggers and hacking tools. if ($http_user_agent~ “libwww-perl”) { set $block_user_agents 1; } if ($http_user_agent ~“GetRight”) { set $block_user_agents 1; } if ($http_user_agent ~“Getweb!”) { set $block_user_agents 1; } if ($http_user_agent ~“Go!Zilla”) { set $block_user_agents 1; } if ($http_user_agent ~“Download Demon”) { set $block_user_agents 1; } if ($http_user_agent ~“Go-Ahead-Got-It”) { set $block_user_agents 1; } if ($http_user_agent ~“TurnitinBot”) { set $block_user_agents 1; } if ($http_user_agent ~“GrabNet”) { set $block_user_agents 1; } if ($http_user_agent ~"WebBench") { set $block_user_agents 1; } if ($http_user_agent ~"ApacheBench") { set $block_user_agents 1; } if ($http_user_agent ~ ^$){ set $block_user_agents 1;www.atcpu.com } if ($http_user_agent ~ "python-urllib"){ set $block_user_agents 1; } if ($block_user_agents = 1) { return444; } } | |
![]() | ![]() |