-
Notifications
You must be signed in to change notification settings - Fork 956
CustomAction: Browser Verify
AlexaZhou edited this page Mar 9, 2016
·
5 revisions
Browser Verify可以验证发起请求的客户端是否为浏览器,并拦截来自非浏览器客户端的请求
可以定义多条规则,每条规则包含以下参数
- Enable
- Matcher
- Verify Type
- Cookie
- JavaScript
寻找规则
每收到一个请求,VeryNginx将按照从上到下(序号递增)的顺序,取每一条规则的 Matcher 进行匹配测试,当找到第一个符合的Matcher时,即由这一条规则进行处理,停止后续匹配
应用规则
当收到一个请求时,VeryNginx 会通过算法得到一个Token
- 当配置Verify Type为Cookie时:
用户的Cookie中没有带有这个Token时,将会返回一个302重定向,将用户重定向到当前地址,并在http响应头中设置cookies。如果客户端是浏览器,将自动带上这个Token再继续访问,此时将被放行。如果客户端是其他工具,并且该工具不支持302以及http响应头中的set cookies字段,将无法继续访问
- 当配置Verify Type为JavaScript时:
和 Type 为 Cookie 时原理类似,不同之处在于没有Token时,返回一个网页,并通过内嵌在网页中的JavaScript来设置Cookies并发起重定向。需要浏览器支持JavaScript才可以验证通过
Token生成算法原型
Token = hash( client_ip + UserAgent + key )
其中Key为VeryNginx第一次运行时产生的随机数
这样可以为每个用户和浏览器产生不同的Token,并且无法伪造
- 注意规则的顺序,防止一个严格的Matcher被排名更前的宽松Matcher覆盖,导致规则不起作用
- 本功能可能会影响搜索引擎抓取信息,建议只针对部分页面开启,或者仅在被攻击时开启