整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          正則表達式速查手冊

          正則表達式速查手冊
          >^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$

          常處理文字資料或程序代碼,常會涉及到在多個文件中對內容進行統一處理的情形。如對批量替換某些文字或按行替換某些內容,或對文檔按內容進行分割、合并等,這些操作單靠常用編輯器來完成,效率不會很高,難點在于多個文件。一款專門用于多文件內容轉換的軟件TextConverter,可以輕松高效地完成各種文件內容批量轉換任務。

          1. 構建條件 批量替換文檔內容

          如果要批量替換一批文檔中的某些內容,點擊“File→Open Files”命令(或按Ctrl+O組合鍵),打開這些文檔。選擇右側窗格中的Replace Text復選框,點擊其后的Options按鈕,在Search for框中輸入要替換的內容,在Replace by框中輸入要替換為的內容。這時在左側窗格下部的Preview窗口中,會顯示替換前后的內容預覽。點擊Replace按鈕執行替換(圖1)。

          如果文檔中需替換的內容不止一處,則可以先構造所有替換條件,再行替換。為此,只需在輸入完一組Search for和Replace by條件后,點擊Add按鈕,將該條件加入復合替換列表。選中Show Settings for mutiple Replacements選項,顯示所有構造的條件。所有替換條件構造完成后,點擊Convert and Save按鈕完成替換并保存文件(圖2)。

          替換的文件也可以保存到一個新文件中,以便留存原文件。先通過“View→Saving Options”命令開啟保存選項對話框,然后選擇Save as new File選項,在Floder框中指定保存新文件的文件夾,在Name框中指定文件名稱格式(支持通配符格式和自定義格式),在Format框中指定文件格式類型(支持文本、圖片、網頁、程序代碼和用戶自定義格式)。若不需要保留原文件,選擇Delete Original Files選項,替換后會自動刪除原文件。條件設好之后,點擊Convert and Save替換保存(圖3)。

          2. 按行批量替換文檔內容

          文檔內容不但可以按關鍵詞實現批量替換,還可以按照行來實現替換。這里的“行”我們可以理解為一個自然段,它可以是一行程序代碼,也可以是文章中的一段文字。如果要將某幾個行的內容替換為同一段內容,選中Line Number選項,然后輸入行號(兩個行號之間用半角逗號分隔),在Replace with框中輸入要替換為的內容(圖4)。按行替換還可以改用行中包含某個文本內容為條件,選擇Text選項即可實現。如果選擇RegEx選項,則可以構造正則表達式,以應對更為復雜多變的需求。

          替換的其他設置與上述類似。設好之后,執行替換和保存操作即可。

          3. 多行或多段的批量刪除

          不但可以實現成批替換,我們還可以用TextConverter一次性刪除多個文本中的多行或多段內容。

          要刪除某些文本,在Actions欄內選擇Delete Text,然后在Delete this Text框中輸入要刪除的內容,點擊Add添加更多要刪除的內容,執行刪除操作。如果要按行作為刪除條件進行刪除,則選擇Delete Lines復選框,然后從列表中選擇條件方式,例如按行的范圍刪除、刪除某行之后的行、刪除行中包含某文本的行等(圖5)。條件構造好之后,點擊Convert and Save刪除內容并保存文件。

          4. HTML代碼批量處理

          編寫網頁時,如果要批量處理HTML代碼,也可以利用上述軟件的批量功能來完成。

          在Actions窗格中選擇HTML Actions復選框,然后在列表中就可以通過選擇,完成移除HTML標記、建立Web鏈接、建立E-mail鏈接、刪除無用的制表符、替換各種網頁代碼符號等網頁文件的處理任務(圖6)。

          5. 批量連接和分割文件

          有時,我們需要將一些分散的文本連接成一個文件,例如小說章回的連接;有時,又可能需要將其分割開來進行處理。要實現此類任務,可利用TextConverter軟件的Join Files和Split Files兩個Action選項來完成。只需在選中了Join Files和Split Files復選框之后,點擊選項后的Options按鈕,構造連接條件或指定分割位置,執行連接或分割操作即可。

          6. 在文檔中顯示文件屬性

          如果希望在許多文檔中自動顯示其所在文件的某些屬性,例如路徑和文件、擴展名文件日期、文件大小、文件類型等,可在文檔中以一個通用的常量來表示這些值,在用TextConverter軟件轉換時,會自動把這些常量轉換為該文件的對應屬性(圖7)。具體操作時,只需在文檔的適當位置引用如圖所示的常量,在TextConverter中對Constant選項打鉤,執行成批轉換即可。

          文分享自華為云社區《【安全攻防】深入淺出實戰系列專題-特殊字符校驗-云社區-華為云》,作者: MDKing。

          特殊字符校驗的背景

          • SQL注入、XSS等常見的安全攻擊場景會涉及到一些特殊字符的利用。尤其是界面輸入框、API接口可支持輸入字符串的情況,如果對來歷不明的用戶輸入如果不加防范,很容易產生安全問題。
          • 正確的做法是在根據業務流程在各個環節添加合適的安全防護、處理邏輯。例如:對于輸入的字符串參數做一定的參數校驗、對參與執行SQL操作的參數進行預編譯、對于參與界面回顯的參數針對回顯的上下文領域做對應領域的編碼等。
          • 由于根據不同的業務流程需要針對特殊字符做的安全防護各有不同,相應的設計、實現等成本較高,所以通常大家會傾向于盡量在第一道防線(參數校驗)上解決大部分的問題,降低后續流程處理的工作量跟難度。所以本文旨在分析探討如何在參數校驗階段,設計好針對不可信字符串的校驗、過濾,尤其是特殊字符相關的校驗。

          特殊字符校驗的原則

          參考華為Web應用安全開發規范:確保輸入數據只包含允許的字符集,不包含不合法和危險的字符,盡可能采取“白名單”的方式進行輸入校驗。

          總體思路是分兩種情況:

          1. 輸入范圍較為明確的字段,如XXid、XXname、郵箱、手機號等。可以明確列出允許輸入范圍的,要使用白名單的校驗方式。例如如果對于用戶名只允許包含字母、數字和下劃線,則可以使用正則表達式對輸入做白名單校驗:^[0-9A-Za-z_]+$
          2. 輸入范圍較大、較不明確的字段,如備注、富文本內容等,由于全量的特殊字符(包括鍵盤可直接輸入、鍵盤不可直接輸入)集數量還是非常大的,當業務上也沒法通過簡單的白名單枚舉的方式枚舉出合法字符的范圍時,就需要根據業務流程,選擇相關的危險字符,進行黑名單的過濾校驗。例如,存在一個remark字段用戶保存后會展示在界面上被其他用戶看到,此時我們要對XSS做重點關注,我們可以通過如下正則校驗字符串是否不包含指定的危險字符^[^"'()<>/&=]+$。

          延伸:注意,參數校驗只是為了低成本的一次性解決大部分的問題,不能完全強依賴這個環節的校驗,也不能強求這個校驗把所有的有可能出現風險的字符都包含全。比如,上例的remark如果業務上就是需要輸入(、)、=等符號怎么辦?難道就是不允許輸入嗎?也是不合理的。所以對于XSS注入防護的終極方案依然是在渲染前做字符編碼,這樣既能支持多數字符的輸入,又不會有安全問題。所以還是建議特殊字符校驗只選擇最通用危險的少量特殊字符,配合其它的安全防護(比如字符編碼、SQL預編譯等)。

          常見安全場景對應的危險特殊字符表

          使用指導:在做安全評估時,可將字母、數字、中文以及無安全攻擊場景的字符作為安全最小集,如果不涉及自定義拼接SQL,可以忽略第一列。

          特殊字符

          SQL注入攻擊

          XSS

          命令注入

          文件包含攻擊

          XXE

          URL編碼攻擊

          CSV注入

          ,

          需過濾







          .




          需過濾




          ?








          !

          需過濾


          需過濾





          :








          ;

          需過濾


          需過濾

          需過濾




          "

          需過濾

          需過濾



          需過濾



          '

          需過濾

          需過濾



          需過濾



          (

          需過濾

          需過濾

          需過濾





          )

          需過濾

          需過濾

          需過濾





          [

          需過濾







          ]








          {








          }








          <

          需過濾

          需過濾

          需過濾


          需過濾



          >

          需過濾

          需過濾

          需過濾


          需過濾



          -

          需過濾






          需過濾

          _

          需過濾







          /

          需過濾

          需過濾

          需過濾

          需過濾

          需過濾

          需過濾


          \

          需過濾


          需過濾

          需過濾




          |

          需過濾


          需過濾





          @

          需過濾






          需過濾

          #








          $



          需過濾





          %

          需過濾





          需過濾


          ^

          需過濾







          &

          需過濾

          需過濾

          需過濾





          *

          需過濾







          +

          需過濾





          需過濾

          需過濾

          =

          需過濾

          需過濾





          需過濾

          ~

          需過濾







          `



          需過濾





          空格



          需過濾

          需過濾




          換行



          需過濾





          特殊字符實戰

          半角/全角之別

          除了漢字是默認全角之外,其它很多字符,比如字母、數字、標點符號都是有半角/全角之分的,大家最常用的是半角,全角不常用。但是如果是涉及到寫黑白名單的正則的時,如果不知道其中的差別,會導致寫錯。

          在UE中可以顯示字節長度,我們分別輸入字母、數字、標點符號的半角(占一個字節寬度)、全角(占兩個字節寬度)形式,對比如下:

          通過如下驗證,可以發現,^[a-zA-Z0-9,.]+$ 只能只能匹配半角的字符,全角的是沒法匹配的。

          想要匹配全角的字母,數字,可以使用^[\uFF21-\uFF3A\uFF41-\uFF5A\uFF10-\uFF19]+$,實際驗證如下:

          回車/換行符之別

          回車(\r):CR(Carriage Return的縮寫,ASCII碼是13,16進制對應0D),告訴打字機需要“把打印頭定位在行首”

          換行(\n):LF(Line Feed的縮寫,Ascii碼是10,16進制對應0A),告訴打字機“把打印紙向下移動一行”

          源自于二戰中美國使用的打字機,電子計算機問世后,這兩個概念也同時被引入。因為存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就夠了。從此,計算機界就出現了分歧:

          • 微軟Windows系統:每行結尾有“<回車><換行>”,即“\r\n”
          • Unix/Linux系統: 每行結尾只有“<換行>”,即"\n"
          • 蘋果Mac系統: 每行結尾只有“<回車>”,即"\r"

          如果不清楚這些概念,很容易導致寫錯正則表達式。我們分別在window、linux系統上創建文件,內容為AB{換行}AB。如下,通過肉眼是看不出區別的:


          在UE中按下Ctrl+H可查看二進制,如下可以看到window文件的換行符實際上為0D 0A,即\r\n。

          linux文件的換行符只有一個0A,即\n

          通過代碼將文件內容讀取后,使用正則表達式做判斷,發現^[AB\nAB]+$只能成功匹配linux下的文件。

          通過debug也能看到兩個文件讀取出來的具體內容

          關注#華為云開發者聯盟# 點擊下方,第一時間了解華為云新鮮技術~

          華為云博客_大數據博客_AI博客_云計算博客_開發者中心-華為云


          主站蜘蛛池模板: 2018高清国产一区二区三区 | 亚洲AV综合色一区二区三区 | 一区二区三区电影在线观看| 一区二区三区在线视频播放| 国产一区二区电影在线观看| 黑巨人与欧美精品一区| 午夜影视日本亚洲欧洲精品一区 | 中文字幕在线无码一区二区三区| 精品国产一区二区三区香蕉| 一区二区三区视频在线| 中文字幕aⅴ人妻一区二区| 国产成人一区二区精品非洲 | 亚洲中文字幕无码一区二区三区 | 国产怡春院无码一区二区| 3d动漫精品一区视频在线观看| 国产精华液一区二区区别大吗| 精品国产AⅤ一区二区三区4区 | 精品国产一区在线观看 | 日本精品少妇一区二区三区| 国产SUV精品一区二区88| 伊人久久大香线蕉AV一区二区| 亚洲狠狠狠一区二区三区| 日韩爆乳一区二区无码| 亚洲综合一区二区精品导航| 久久精品一区二区国产| 久久se精品一区二区国产| 风间由美性色一区二区三区 | 亚洲AV无码第一区二区三区| 日韩一区二区电影| 人妻无码一区二区三区免费| 精品人妻中文av一区二区三区| 国产香蕉一区二区精品视频| 色一情一乱一区二区三区啪啪高| 精品无码综合一区二区三区| 女人18毛片a级毛片一区二区| 四虎在线观看一区二区| 日韩一区二区三区视频久久| 丰满人妻一区二区三区视频53| 国精产品一区一区三区| 精品无码av一区二区三区| 亚洲一区二区三区乱码在线欧洲|