全球主机交流论坛

标题: Nginx之if多重判断写法 [打印本页]

作者: 绝对菜鸟    时间: 2012-5-19 13:28
标题: Nginx之if多重判断写法
nginx的if语法比较严格,并且还没and && || 这类写法,这样只能投机倒把另外想办法实现多重判断.
  1. if ($request_uri ~ "xxx.php?xxx") {
  2. set $iftmp Y;
  3. }
  4. if ($http_user_agent ~ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)") {
  5. set $iftmp "${iftmp}Y";
  6. }
  7. if ($iftmp = YY) { return 400;}
  8. location / {
  9. proxy_pass https://172.0.0.11;
  10. }
复制代码
重点一 set $iftmp Y 将iftmp设置为Y,set命令是一个大大的亮点

重点二 还是set部分set $iftmp "${iftmp}Y" 在set里面 ${iftmp}Y将参数叠加一次,${iftmp}是一个大大的亮点.

$request_uri是客户端请求的完整请求路径,$http_user_agent是用户端发出请求的浏览器参数.
上面的if判断是一个简单防cc攻击的原型,一般普通的cc攻击会固定攻击页面,然后浏览器参数也大多不变,当前两个if参数同时满足后第三个if就直接返回给请求端400错误,
这样就完成了一次简单的过滤cc攻击请求到正常页面,根据上面的实例可以依葫芦画瓢进行其他一些应用使用.

原文转载自:http://www.sky.la/2012/05/957.html

作者: 完美    时间: 2012-5-19 13:30
恩 学习了。。
作者: lazyzhu    时间: 2012-5-19 13:31
nginx 能不用 if 就不用 if
if 会降低nginx性能
这是 Igor Sysoev 的原话
作者: 绝对菜鸟    时间: 2012-5-19 13:32
lazyzhu 发表于 2012-5-19 13:31
nginx 能不用 if 就不用 if
if 会降低nginx性能
这是 Igor Sysoev 的原话

有判断就会运算 有运算就会有牺牲性能

在面对一些问题前   利大于弊的情况下  是可取的
作者: 有个就好    时间: 2012-5-19 13:59
挖煤的。。。
作者: hitsword    时间: 2012-5-19 14:01
不懂。
作者: name2012    时间: 2012-5-19 14:02
呵呵 学习一下 虽然不是很懂
作者: 绝对菜鸟    时间: 2012-5-19 14:02
hitsword 发表于 2012-5-19 14:01
不懂。


手yin哥  好
作者: hitsword    时间: 2012-5-19 14:03
绝对菜鸟 发表于 2012-5-19 14:02
手yin哥  好

你妹。我跟手yin哥没关系。
作者: 用户名    时间: 2012-5-19 14:18
技术文章
作者: loveminds    时间: 2012-5-19 14:59
为何要过滤这个 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1
作者: 绝对菜鸟    时间: 2012-5-19 15:31
本帖最后由 绝对菜鸟 于 2012-5-19 15:32 编辑
loveminds 发表于 2012-5-19 14:59
为何要过滤这个 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1


只是一个 例子举证  
按cc攻击的例子  从日志里面抓取到的特征

请求地址和浏览器参数的特征出现的规律最多就按日志里面的参数去修改 然后就封掉了cc

当然 可能会误杀




欢迎光临 全球主机交流论坛 (https://loc.mjj8.eu.org/) Powered by Discuz! X3.4