麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

正則表達式(regex)錯誤使用導致功能漏洞分析

2020-03-16 21:03:15
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了正則表達式(regex)錯誤使用導致功能漏洞,需要的朋友可以參考下

寫在前面的話

正則表達式它的強大字符串匹配功能,導致目前在各種程序語言中,都非常流行!它被用來描述或者匹配一系列符合某個句法規則的字符串。很多剛剛使用正則表達式都是從聽說這個,然后在要使用時候去網上搜索。 很少人一開始就系統去學習正則表達式,從定義原理使用系統學習。因為,對應初學者覺得它太麻煩了,好多原字符。看到那么長一串字符,就很頭痛。因此,也懶得去學習。一般遇到問題,直接去網上搜索。如:“郵箱正則表達式,手機號正則表達式,url正則表達式…..” ,我們發現一個很有意思現象,“怎么郵箱正則表達式可以各種各樣,url正則表達式也不相同“,都出都在推薦,都說自己是正確的,到底那個是正確的呢?

從各異的正則表達式,我們可以得出2個結論。一、正則表達式很靈活,多種方法可以實現同一種結果(條條大路通羅馬),二、正則表達式匹配結果需要驗證的,復雜正則表達式很容易產生錯誤匹配。今天,我這里不說正則表達式靈活性,我們看看常見正則表達式錯誤使用,產生功能漏洞例子。希望,我們在使用時候多多注意。以下例子,來自我工作中審核代碼,經常出現例子,也歡迎朋友們補充!

定界符”^$”缺失bug

 

 
  1. <?php 
  2. ///檢測用戶名,只能是字符加數字 
  3.  
  4. $user="chengmo8"
  5.  
  6. if(!preg_match("<strong>/[0-9a-zA-Z]+/</strong>",$user)) 
  7. exit("用戶名錯誤!"); 

這是很常見的,因為沒有定界符,正則表達式搜索,會從$user中,字符中從左向右搜索,指導找到滿足條件的字符,就會匹配到,并且返回true,程序將繼續執行。我們測試,用戶名輸入:chengmo8,chengmo8??!,#$chengm,中國cadadf,都可以匹配成功,看似要限制只能字符加數字用戶名。實際由于缺乏限定符正則表達式,變成了,只要字符串中包含字母加數字就可以注冊。而我們需要的是,從頭到尾字符串必須是字母加數字。正則表達式應該是:^[0-9a-zA-Z]+$ ,看似簡單,在做從頭到尾字符匹配時候,不要忘記了^$字符。一個匹配輸入字符開頭,一個匹配輸入字符結尾(默認換行符前)

這種經常做,手機號,郵箱,url,注冊用戶名,密碼等。都需要有限定符號!

方括號字符"[ ]”中字符使用Bug

在正則表達式中,常見正則表達式原字符(.*?等等)在方括號字符中將變成普通字符。 在方括號字符中,表示特殊字符,只有“^-/” 3個字符是特殊字符。其中,“^”字符,在左方括號第一個字符時候,是代表不在后面所有字符中字符!

如:[^0]不能是0字符。而如果是:[0^] ,就代表包含0^字符了。因為:^已經不是左括號最右邊一個字符了。 已經跟普通字一樣了。“-”字符代表是范圍字符,如:[0-9] 代表是匹配0到9直接字符。”/”轉義字符,如果想匹配”-“字符,可以[0/-9],如果要匹配”/”,可以是:[0//9],表示“09/” 3個字符了。說這么些,其實就是因為,很多朋友在使用方括號字符時候,經常會弄錯特殊字符。

 

 
  1. <?php 
  2. ///檢測用戶名,只能是字符加數字 
  3.  
  4. $code = ""
  5.  
  6. ///匹配字符范圍包含.*? 
  7. preg_match("/[.*?]+/",$code); 
  8.  
  9. ///匹配字符范圍包含a到z 26個字符 
  10. preg_match("/[a-z]+/",$code); 
  11.  
  12. ///匹配字符范圍包含A到z 實際上,是從默認情況ascii表中,A字符到z字符中間,一共48字符 
  13. preg_match("/[A-z]+/",$code); 
  14.  
  15. ///匹配字符范圍包含A到z 是對應ascill碼,16進制 
  16. preg_match("/[x41-x7A]+/",$code); 
  17.  
  18. ///只想匹配字符串and 
  19. preg_match("/[and]/",$code); 
  20. ///實際匹配,所有包含a,n,d 組成所有字符,跟順序無關 

加紅是經常錯誤理解,只想匹配and,一旦加入到"[ ]"中字符,可以理解為所有字符組成字符 集合。任意在其中出現字符,就可以匹配,跟順序無關系!如果真需要匹配這類,按字符分組來,如”and|bnd” 將匹配and字符串,或者是bnd字符串。”|”字符是,字符串或操作符。左右兩邊連續字符串會組合為一個整體匹配。

好了,今天就整理,常見正則表達式,2種常見錯誤。歡迎大家交流!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最近中文字幕一区二区 | 成人毛片免费 | 毛片免费视频观看 | 青青草最新网址 | 一级爱片 | 国产精品亚洲精品日韩已方 | 成人午夜影院 | 成人做爰www免费看 欧美精品免费一区二区三区 | 日韩在线毛片 | 欧美一级全黄 | www.国产一区.com | 中文字幕www. | 午夜小影院 | www69xxxxx| 成年毛片 | 国产精品爱久久久久久久 | 久久精品一二三区 | 久久精品视频1 | 黄色美女免费 | 亚洲5区 | 成人一级毛片 | 美国一级毛片片aa久久综合 | 国产羞羞视频在线免费观看 | 国产在线1区 | 日韩a毛片免费观看 | 国产欧美精品综合一区 | 欧美日韩在线播放 | 国产精品久久久久久久娇妻 | 欧美人与zoxxxx另类9 | 九九热精品在线视频 | 国产女同疯狂激烈互摸 | 91看片淫黄大片欧美看国产片 | 精品一区二区免费 | 国产流白浆高潮在线观看 | 黄色av电影在线播放 | 欧美一级做 | 国产1区2区3区中文字幕 | 色网站免费观看 | 欧美日韩亚洲在线 | a免费毛片 | 97久色|