线下交易没保障,很多用户被骗,支持【值得要交易平台】正规网站担保交易
【线下交易被骗无法处理】

源码交易网

nginx服务器防sql注入与溢出

  • 时间:2018-10-17 20:53 编辑: 来源: 阅读:17
  • 扫一扫,手机访问
摘要:代码不可能是全完美的,动态网页在实用中难免会遇到sql注入的攻击。而通过nginx的配置过滤,可以很好的避免被攻击的可能。SQL注入攻击一般问号后面的请求参数,在nginx里用$query_string表示 。一、特殊字符过滤例如URL /plus/list.

代码不可能是全完美的,动态网页在实用中难免会遇到sql注入的攻击。而通过nginx的配置过滤,可以很好的避免被攻击的可能。SQL注入攻击一般问号后面的请求参数,在nginx里用$query_string表示 。

一、特殊字符过滤

例如URL /plus/list.php?tid=19&mid=22' ,后面带的单引号为非法的注入常用字符。而想避免这类攻击,可以通过下面的判断进行过滤。


if ( $query_string ~* ".*[;'<>].*" ) {
return 404;
}


二、sql语句过滤


if ($request_uri ~* "(cost()|(concat()") {
                 return 444;
         }
         if ($request_uri ~* "[+|(%20)]union[+|(%20)]") {
                 return 444;
         }
         if ($request_uri ~* "[+|(%20)]and[+|(%20)]") {
                 return 444;
         }
         if ($request_uri ~* "[+|(%20)]select[+|(%20)]") {
                 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_injections 1;
}
if ($query_string ~ “[a-zA-Z0-9_]=/([a-z0-9_.]//?)+”) {
set $block_file_injections 1;
}
if ($block_file_injections = 1) {
return 444;
}

四、溢出攻击过滤

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


五、spam字段过滤


set $block_spam 0;
if ($query_string ~ “(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)”) {
set $block_spam 1;
}
if ($query_string ~ “(erections|hoodia|huronriveracres|impotence|levitra|libido)”) {
set $block_spam 1;
}
if ($query_string ~ “(ambien|bluespill|cialis|cocaine|ejaculation|erectile)”) {
set $block_spam 1;
}
if ($query_string ~ “(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)”) {
set $block_spam 1;
}
if ($block_spam = 1) {
return 444;
}


六、user-agents头过滤


set $block_user_agents 0;
if ($http_user_agent ~ “Wget”) {
 set $block_user_agents 1;
}
# Disable Akeeba Remote Control 2.5 and earlier
if ($http_user_agent ~ “Indy Library”) {
set $block_user_agents 1;
}
# 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 ($block_user_agents = 1) {
return 444;
}
}

注:之所以返回444,是因为其完全不回应客户端,比403或404等更加非常节省系统资源。

上一篇——nginx服务器防sql注入与溢出(一) 列出了常用的进行注入与溢出的各种防止方法。但是上文列出的是普遍的方法,针对各自现网应用的不同,使用上也需要进行相应的调整。下面列出一下我现网中的防止方法。

一、自动防护


if ($request_uri ~* .(htm|do)?(.*)$) {
           set $req $2;
        }
        if ($req ~* "(cost()|(concat()") {
                return 503;
        }
        if ($req ~* "union[+|(%20)]") {
                return 503;
        }
        if ($req ~* "and[+|(%20)]") {
                return 503;
        }
        if ($req ~* "select[+|(%20)]") {
                return 503;
        }



1、这里之所以使用$request_uri而未使用$query_string变量,因为通过$request_uri进行rewrite分割更精准。

2、%20代表的是空格,同上文不的是,我这里把上面的空格匹配进行了取消。这样像www.361way.com/aaa.do?select * from test之样的也可以进行匹配。

3、上面的htm是伪静态,实际上同.do一样,也是动态文件。为了便于和静态文件进行区分,这里选择了htm而不是html。

4、注意,最上面的url里面的? ,这个也分重要。如果没有的话,www.361way.com/aaa.htm select * from test不会被过滤,而www.361way.com/aaa.htm?select * from test会被过滤。如果想将前面的也过滤,只需要把? 取消即可。

二、日志获取,手动分析

具体哪些url有可能有注入漏洞而被人扫描了,可以利用下面的脚本并通过mail发送。


#!/bin/bashcd /tmp/bin/rm -rf nginxanalay.tar.gz
cd /logs/nginx
egrep  '(sqlmap|select|"order by")' *|egrep -v '(Googlebot|Baiduspider|Sosospider|stepselect)'|awk -F 'HTTP/1.1"' '{print $1}' > /tmp/nginxanalay.log
cd /tmp
tar czvf nginxanalay.tar.gz nginxanalay.log/usr/bin/sendEmail -f nagios@361way.com -t 收件人1 收件人2 -s mail.361way.com -u 'site sql analay' -m 'this is nginxlog analay . see Annex ,That is
 may be injected into page .' -xu 用户名 -xp 密码 -a /tmp/nginxanalay.tar.gz


  • 全部评论(0)
最新发布的资讯信息
【站长教程|thinkphp教程】ThinkPHP框架 5.0.x sql注入漏洞分析(2018-10-29 21:20)
【站长教程|thinkphp教程】Thinkphp3.2.3最新版update注入漏洞(2018-10-29 21:14)
【各大VIP论坛资源|青龙建站教程自学网,屌丝建站视频】[网页设计] Fireworks CS4 视频教程(2018-10-29 21:13)
【站长教程|】[网页设计] 闪魂:Flash CS4完善 进 门与案例精解全套视频下载(2018-10-29 21:11)
【站长教程|】nginx服务器防sql注入与溢出(2018-10-17 20:53)
【站长教程|thinkphp教程】TP框架如何开启log日志,日志级别代表什么含义(2018-09-20 12:53)
【杂谈合集|其他杂谈】QQ79747030 是骗子 卖备案域名的 结果转的不是备案域名骗子(2018-01-22 00:36)
【站长教程|其他教程】哈哈日语 日语五十音(2017-10-28 17:24)
【站长教程|源码教程合集】外卖人手机访问跳转到WAP教程(2017-10-05 01:40)
【站长教程|源码教程合集】外卖人单城市 外卖人8.4绿色完整版+3款APP文件包!(2017-10-05 01:37)
底部广告
网站首页 | 关于我们 | 广告合作 | 联系我们 | 隐私条款 | 免责声明
CopyRight 2014-2024 源码交易网 | 闽ICP备12011718号-2
展开