1. 首页
  2. 技术分享

Nginx如何防止SQL注入攻击以及XSS攻击(解决方案)

XSS(Cross Site Scripting)全称为跨站脚本攻击,它是一种常见于web应用程序中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,从而破坏页面结构等。XSS攻击是通过在用户端注入恶意的可运行脚本,若服务器端对此用户的输入不进行处理,直接将用户的输入输出到浏览器,然后浏览器将会执行此用户注入的脚本。简单的理解就是黑客通过在网页中注入恶意脚本,当用户浏览网页时,恶意脚本执行,从而控制用户浏览器行为的一种攻击方式。

 

SQL注入攻击是指通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通俗一点来说,它利用了现有的应用程序,将一些恶意的SQL命令注入到后台数据库引擎执行的能力。并且它可以通过在Web表单中输入恶意SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者的初衷去执行SQL语句。通常,SQL注入攻击是黑客对数据库安全进行攻击的常用手段之一,原因是因为很多程序员在编写代码的时候,没有严格的对用户数据输入的合法性进行判断,从而使应用程序存在着一些安全隐患。

 

以上两种攻击方式一般都会绕过CDN缓存规则直接回源请求,增加PHP与MySQL运算请求,从而造成服务器负载严重飙升。在网站日志当中我们不难看到几乎很大一部分都是GET/POST形式的请求,虽然中国防火墙都完美的识别并且拦截了,但是它还是会对服务器的负载造成一定的压力,所以最有效的办法就是在Nginx中加入防止SQL 注入、XSS攻击的配置。具体操作方法就是将以下的Nginx配置文件代码放入到对应站点的.conf 配置文件server里,然后重启Nginx即可生效。

  1. if($request_method !~* GET|POST){return444;}
  2. #使用 444 错误代码可以更加减轻服务器负载压力。
  3. #防止 SQL 注入
  4. if($query_string ~*(\$|‘|–|[+|(%20)]union[+|(%20)]|[+|(%20)]insert[+|(%20)]|[+|(%20)]drop[+|(%20)]|[+|(%20)]truncate[+|(%20)]|[+|(%20)]update[+|(%20)]|[+|(%20)]from[+|(%20)]|[+|(%20)]grant[+|(%20)]|[+|(%20)]exec[+|(%20)]|[+|(%20)]where[+|(%20)]|[+|(%20)]select[+|(%20)]|[+|(%20)]and[+|(%20)]|[+|(%20)]or[+|(%20)]|[+|(%20)]count[+|(%20)]|[+|(%20)]exec[+|(%20)]|[+|(%20)]chr[+|(%20)]|[+|(%20)]mid[+|(%20)]|[+|(%20)]like[+|(%20)]|[+|(%20)]iframe[+|(%20)]|[\<|%3c]script[\>|%3e]|javascript|alert|webscan|dbappsecurity|style|confirm\(|innerhtml|innertext)(.*)$) { return 555; }
  5. if ($uri ~* (/~).*) { return 501; }
  6. if ($uri ~* (\\x.)) { return 501; }
  7. #防止 SQL 注入
  8. if ($query_string ~* “[;’<>].*“) { return 509; }
  9. if ($request_uri ~ ““) { return 509; }
  10. if ($request_uri ~ (\/\.+)) { return 509; }
  11. if ($request_uri ~ (\.+\/)) { return 509; }
  12. #if ($uri ~* (insert|select|delete|update|count|master|truncate|declare|exec|\*|\’)(.*)$ ) { return 503; }
  13. #防止 SQL 注入
  14. if ($request_uri ~* “(cost\()|(concat\()“) { return 504; }
  15. if ($request_uri ~* “[+|(%20)]union[+|(%20)]“) { return 504; }
  16. if ($request_uri ~* “[+|(%20)]and[+|(%20)]“) { return 504; }
  17. if ($request_uri ~* “[+|(%20)]select[+|(%20)]“) { return 504; }
  18. if ($request_uri ~* “[+|(%20)]or[+|(%20)]“) { return 504; }
  19. if ($request_uri ~* “[+|(%20)]delete[+|(%20)]“) { return 504; }
  20. if ($request_uri ~* “[+|(%20)]update[+|(%20)]“) { return 504; }
  21. if ($request_uri ~* “[+|(%20)]insert[+|(%20)]“) { return 504; }
  22. if ($query_string ~ “(<|%3C).*script.*(>|%3E)“) { return 505; }
  23. if ($query_string ~ “GLOBALS(=|\[|\%[09AZ]{0,2})“) { return 505; }
  24. if ($query_string ~ “_REQUEST(=|\[|\%[09AZ]{0,2})“) { return 505; }
  25. if ($query_string ~ “proc/self/environ“) { return 505; }
  26. if ($query_string ~ “mosConfig_[azAZ_]{1,21}(=|\%3D)“) { return 505; }
  27. if ($query_string ~ “base64_(en|de)code\(.*\)“) { return 505; }
  28. if ($query_string ~ “[azAZ09_]=http://”) { return 506; }
  29. if($query_string ~“[a-zA-Z0-9_]=(\.\.//?)+”){return506;}
  30. if($query_string ~“[a-zA-Z0-9_]=/([a-z0-9_.]//?)+”){return506;}
  31. if($query_string ~“b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)b”){return507;}
  32. if($query_string ~“b(erections|hoodia|huronriveracres|impotence|levitra|libido)b”){return507;}
  33. if($query_string ~“b(ambien|bluespill|cialis|cocaine|ejaculation|erectile)b”){return507;}
  34. if($query_string ~“b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)b”){return507;}
  35. #这里大家根据自己情况添加删减上述判断参数,cURL、wget 这类的屏蔽有点儿极端了,但要“宁可错杀一千,不可放过一个”。
  36. if($http_user_agent ~*YisouSpider|ApacheBench|WebBench|Jmeter|JoeDog|Havij|GetRight|TurnitinBot|GrabNet|masscan|mail2000|github|wget|curl|Java|python){return508;}
  37. #同上,大家根据自己站点实际情况来添加删减下面的屏蔽拦截参数。
  38. if($http_user_agent ~*“Go-Ahead-Got-It”){return508;}
  39. if($http_user_agent ~*“GetWeb!”){return508;}
  40. if($http_user_agent ~*“Go!Zilla”){return508;}
  41. if($http_user_agent ~*“Download Demon”){return508;}
  42. if($http_user_agent ~*“Indy Library”){return508;}
  43. if($http_user_agent ~*“libwww-perl”){return508;}
  44. if($http_user_agent ~*“Nmap Scripting Engine”){return508;}
  45. if($http_user_agent ~*“~17ce.com”){return508;}
  46. if($http_user_agent ~*“WebBench*”){return508;}
  47. if($http_user_agent ~*“spider”){return508;}#这个会影响国内某些搜索引擎爬虫,比如:搜狗
  48. #拦截各恶意请求的 UA,可以通过分析站点日志文件或者 waf 日志作为参考配置。
  49. if($http_referer ~*17ce.com){return509;}
  50. #拦截 17ce.com 站点测速节点的请求,所以明月一直都说这些测速网站的数据仅供参考不能当真的。
  51. if($http_referer ~*WebBench*“) { return 509; }
  52. #拦截 WebBench 或者类似压力测试工具,其他工具只需要更换名称即可。

其实防止被攻击最重要的还是做好安全防护,也可以选择开启网站防火墙,一定要记得平时做好备份数据。

本文来自,经授权后发布,本文观点不代表阿南SEO学习博客立场,转载请联系原作者。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(1条)

  • 趣知识 2019年1月12日 13:32

    我反正被DDOS攻击过,Xss好像还没

联系我们

阿南SEO

在线咨询:点击这里给我发消息

邮件:tzananseo@163.com

工作时间:周一至周六,13:30-11:30,节假日休息

QR code