<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 說明 匹配方式(匹配符)這個是規則配置的基礎,需要深入的理解,并融會貫通才可以配置出自己想要的規則 **對應匹配規則中第二個參數** ## 匹配符 這里就通過一些例子來讓大家對匹配符有更清楚的理解,這里關鍵的前提是 **能不用正則就不用!!!** ![](https://img.kancloud.cn/42/04/4204384a056b379072b5af66747650f0_1130x642.png) ### 等于 等于匹配是進行字符串的完全匹配,是區分大小寫的。 比如匹配域名時,匹配符選擇等于,如果我要匹配`www.abc.com`那邊就可以在內容處填寫該內容 第一個參數就是配置的域名,第二個參數為空/或者 `=`,第三參數表示是否取反(可以省略不寫) ![](https://img.kancloud.cn/67/51/67518c346a4f7ed9df578b135dd4274a_751x539.png) ### 數組 等于匹配時只有一個不夠用,當匹配多個相等的內容時,就可以使用數組(滿足數組中任何一個即為真) 當我們需要進行對接口進行白名單控制,不是我們允許的`uri` 就可以全部拒絕訪問,配合取反功能即可 ``` 域名 api.nginx.com 對外有4個 接口 uri /api/get/some-msg /api/add/some-msg /api/set/some-msg /api/del/some-msg ``` 例子:在普通規則 --- uri 頁中可以這樣配置 ![](https://img.kancloud.cn/cd/27/cd278bd78d32a93fbd7366e7c47f6455_756x400.png) ### 字典 數組匹配時條目太多(超過500個)使用,和數組效果一樣,不過其空間復雜度為 1 ,效率更高,其有2個參數一個是匹配的內容,一個是布爾類型,真:表示匹配,假:表示不匹配 例子:實現和上面一樣的作用,使用字典來配置 ![](https://img.kancloud.cn/c4/54/c454ce0392ddb2e77f81ae9a24042f6f_753x465.png) ### 開頭列表/開頭擴展列表 開頭列表:名字標記有些俗氣,但是非常好理解,就是匹配字符串開頭,且是一個數組(數組中任意一個匹配成功,即匹配命中) 開頭擴展列表:僅僅是不區分大小寫的開頭列表 ``` 當匹配一些 uri 時,我們只知道他們是以什么什么開頭的(區分大小寫),后面的 uri 是一些可變參數 /api/v1/sms/{tel}/status /api/v2/aisp/{user-id}/msg 等等這樣的 uri 時 ``` 例子:實現上面類似的功能 ![](https://img.kancloud.cn/06/ce/06ce86960dbb20153ad4c16c242daf83_744x460.png) ### 結尾列表/結尾擴展列表 結尾列表,同樣俗氣的標記,就是匹配字符串的結尾,是個數組(數組中任意一個匹配成功,即匹配命中) 結尾擴展列表:僅僅是不區分大小寫的結尾列表 ``` 當一些域名 他們是 前綴不一樣,但是后面的字符串是完全一樣的,就可以使用該匹配符進行匹配 www1.nginx.com img.nginx.com static.nginx.com 05c12a287334386c94131ab8aa00d08a.cdn.nginx.com 7d6006e64eb59bcf40d8f8f31ff94ea9.ds.nginx.com 在包含時出現的域名,同樣也可以使用結尾列表匹配,且性能會高于 包含 ``` 舉例子: ![](https://img.kancloud.cn/55/53/555377d28e970b8fb123d969a491d263_733x434.png) ### 包含 比如一些情況下,等于不能進行很好的匹配,但是我們需要匹配的`host`都包含一些關鍵字,就可以使用 包含 ``` www1.nginx.com img.nginx.com static.nginx.com 05c12a287334386c94131ab8aa00d08a.cdn.nginx.com 7d6006e64eb59bcf40d8f8f31ff94ea9.ds.nginx.com ... 比如我們需要匹配這些域名,這些都包含了`nginx.com`,那么就可以使用包含來匹配這些域名 ``` 舉例子: 第二參數改成 in,第一個參數需要是字符串 ### 多模匹配 (aho) 效果同包含列表,但是其性能是遠遠高于的,具體是使用了 aho 的算法,當匹配的字符串不是很多,很大時,可以不用該匹配方式 ### 包含列表 / 包含擴展列表 包含列表:包含的復數形式,當有多個字符串需要進行包含匹配時,是個數組(數組中任意一個匹配成功,即匹配命中) 包含擴展列表:僅僅是不區分大小寫的包含列表 一些掃描器,攻擊軟件在`useragent`處有一些特征,就可以使用包含/包含擴展列表進行匹配 ![](https://img.kancloud.cn/1b/12/1b12fc190dd5fdc02ec4dde1cdcd3025_747x430.png) ### 正則 正則是匹配中使用比較多的地方, 但是正則寫的不好,會對性能有非常大的影響,所以在前面就特別說明了,**能不用正則的就不用**。 正則匹配這里用到了 `luajit` 緩存 等一些優化特性,即便是這樣,正則的使用一定要仔細,看幾個例子吧 ![](https://img.kancloud.cn/77/29/772958784f8fe5570ed233fd1291986a_742x342.png) 使用正則一定要進行匹配測試!!! 注:lujit 中特殊的優化特性(啟用JIT、緩存),看一下使用正則時的參數的說明 ![](https://img.kancloud.cn/81/ff/81ff42dc572dc5ae723894b846837b4f_854x458.png) ### 長度 長度比較好理解就是對字符串的長度進行匹配 ``` 一些 GET 請求參數 我們可以進行長度的控制,比如 userid ,其長度是 我們開發人員約定生成的(18位數字) 那么就可以使用一定規則進行匹配,不符合就可以攔截 ``` 例子:限制了所有query_string參數的值長度只能是10-20,不在這個范圍就都被攔截 ![](https://img.kancloud.cn/68/f8/68f8cbd1095dbaf2b683492e5bbfc56b_735x347.png) ### ip段 這里是ip段的匹配,用于匹配整個網段的ip ``` 192.168.0.1/24 就可以匹配 ip 192.168.0.1 - 255 ``` 第二個參數為:cidr,第三個參數就是 tabel了 ### token token是特殊的匹配,token的匹配是WAF在內存中生成的一個隨機字符串,匹配則是判斷該字符串是否由WAF生成的,這樣應用場景一般是一些防護CC攻擊時使用 ![](https://img.kancloud.cn/3b/ca/3bca84a2480daab6802bf4b2dc5428a6_753x525.png) ``` 該條規則就是 訪問 uri = /api/debug 時,我們進行 GET 參數(cctoken) 進行匹配,匹配失敗則返回一個固定的文件內容 <html> <head> <script> var Num="@token@"; var url = window.location.href; var re = new RegExp("\\?","i"); var url = window.location.href; if(re.test(url)){ window.location.href=url+"&cctoken="+Num; } else { window.location.href=url+"?&cctoken="+Num; } </script> </head> </html> 這是一個JS跳轉,跳轉的時候添加了一個 cctoken 的參數,其值為 @token@ 注:WAF在返回 文件/字符串 時,會將 @token@ 替換為一個WAF 生成的隨機字符串 這樣配合 對參數 cctoken 進行 token 的檢查,這樣就可以實現一種 cc 防護了 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看