|
正則表達(dá)式的應(yīng)用十分廣泛,你既可以用它來(lái)提取一大堆文字中的含有對(duì)應(yīng)規(guī)則的單詞,也可以用來(lái)查看文本中是否存在格式不規(guī)范的語(yǔ)句,或者運(yùn)用它來(lái)實(shí)現(xiàn)過(guò)濾,過(guò)濾某些搗蛋鬼輸入的驚為天人的用戶名,或是某些黑客的惡意語(yǔ)句。 但編寫一條邏輯性強(qiáng)符合要求的正則表達(dá)式往往令人頭大,某個(gè)點(diǎn)的疏忽可能會(huì)導(dǎo)致存在功能不完善,過(guò)濾不完全導(dǎo)致可繞過(guò)等缺陷。當(dāng)運(yùn)用在網(wǎng)站上前后端數(shù)據(jù)交互過(guò)濾的正則存在缺陷,則會(huì)被黑客利用進(jìn)行攻擊。 我現(xiàn)在介紹的是如何思考與編寫合格的正則表達(dá)式。由于我個(gè)人熟悉的是web方面,所以詳細(xì)介紹網(wǎng)站前后端常用的正則表達(dá)式??赡芪蚁旅娼榻B的例子所用的方法不是最優(yōu)的,這是因?yàn)槲已芯康牟粔蛏钊?,歡迎大家給予糾正或建議。 網(wǎng)頁(yè)注冊(cè)頁(yè)面截圖 可以看到各個(gè)輸入框都有對(duì)應(yīng)的提示信息,我們希望用戶能按我們的要求輸入相關(guān)信息,但我們不能天真地認(rèn)為給個(gè)溫馨提示所有用戶就會(huì)乖乖地按要求輸入,畢竟還是有搗蛋鬼和黑客存在。 手機(jī)號(hào) 這個(gè)內(nèi)容算是比較容易的,首先手機(jī)號(hào)當(dāng)然是純數(shù)字的(說(shuō)不是的難道號(hào)碼是16進(jìn)制的?),長(zhǎng)度固定為11位。 小明:總結(jié)起來(lái)就是需要用戶輸入長(zhǎng)度為11位的純數(shù)字 然后小明就被搗蛋鬼給調(diào)戲了一下,搗蛋鬼輸入了11個(gè)0 這時(shí)小明才趕緊去科普了一下手機(jī)號(hào)碼組成規(guī)則,原來(lái)首位必須是1?。ㄖ劣谙拗朴?55,139,135等等這樣繁瑣的規(guī)則我們就權(quán)當(dāng)不知道^.^) 至于說(shuō)怎么驗(yàn)證手機(jī)號(hào)碼真?zhèn)蔚?..需要結(jié)合短信驗(yàn)證或號(hào)碼大數(shù)據(jù)支持,略 用戶名 搗蛋鬼想了好多個(gè)狂傲炫酷的名稱希望以此展示個(gè)性,但為了彰顯我們是正規(guī)網(wǎng)站(其實(shí)重點(diǎn)是為了安全),我們需要給予一點(diǎn)限制。 用戶可以給他們隨便起個(gè)名稱abcde,或者是具有意義的KING,或者使用數(shù)字等,但單雙引號(hào)這些特殊字符就沒(méi)必要用來(lái)彰顯自己的個(gè)性了,為了安全我們要禁止用戶使用特殊字符,長(zhǎng)度最好限制在能一口氣讀完... 我們就寫一個(gè)白名單機(jī)制的正則表達(dá)式 不對(duì)啊,萬(wàn)一用戶想起個(gè)中文名稱呢,這要求也不過(guò)分吧。這時(shí)我們就要修改一下,添加個(gè)中文的白名單 這次可以愉快的交差了。至于那些粗俗的昵稱,是需要根據(jù)完整的龐大的黑名單進(jìn)行屏蔽,所以我只能溫馨提示:小孩子不可以講臟話 另一種方法是基于黑名單過(guò)濾所有特殊符號(hào)(一般黑名單會(huì)有隱藏的風(fēng)險(xiǎn)) 一次性把所有特殊字符都寫上去了,除了_下劃線。 郵箱 郵箱是一個(gè)很重要的元素,可以用來(lái)驗(yàn)證身份,接收網(wǎng)站郵件等。我們需要開(kāi)放這功能,順便加點(diǎn)過(guò)濾,防止用戶輸入有害信息。 分析一下郵箱的格式,一般郵箱都是名稱@域名這樣的形式,含有大小寫字母和.(點(diǎn)號(hào)),-(減號(hào)),_(下劃線)。域名可分多段,且只有第一段會(huì)出現(xiàn)數(shù)字。(最詳細(xì)的規(guī)則不止這些,現(xiàn)在簡(jiǎn)化一下)到現(xiàn)在是不是感覺(jué)有點(diǎn)繞,覺(jué)得過(guò)于復(fù)雜不知如何入手,但我們可以將其分段實(shí)現(xiàn) 先把各部分組成單獨(dú)列出來(lái),長(zhǎng)度我自由設(shè)置的,應(yīng)該能匹配到大多數(shù)郵箱(老司機(jī)可跳過(guò)此步) 檢查一下每一小段,感覺(jué)差不多了,最后拼成一句就完事了 最后拼接成超長(zhǎng)的語(yǔ)句,但如果一小段一小段的去分析,你會(huì)發(fā)現(xiàn)也不過(guò)如此。這是比較粗暴的匹配了,更多規(guī)則添加歡迎自己來(lái)挑戰(zhàn)。 密碼 先舒口氣。密碼的話,還是很簡(jiǎn)單的嘛。 限制為大小寫字母和數(shù)字組合就好了 what?添加特殊字符后密碼安全系數(shù)直線上升... 那干脆別過(guò)濾了[滑稽] 這雖然能保障用戶密碼安全,不易被破解,但這需要一套完善的后臺(tái)處理機(jī)制,感興趣的可深入研究web安全 該怎么使用這些正則表達(dá)式 對(duì)于應(yīng)用網(wǎng)站檢驗(yàn)表單,我們使用匹配這一類的函數(shù)即可。對(duì)傳入?yún)?shù)進(jìn)行一遍匹配,根據(jù)返回值判斷內(nèi)容是否符合正則表達(dá)式,設(shè)置相應(yīng)的if判斷語(yǔ)句。至于是寫在前端還是寫在后端,個(gè)人建議是用作防止用戶輸錯(cuò)信息格式的可以放在前端驗(yàn)證,而要調(diào)用數(shù)據(jù)庫(kù)的則盡量寫在后端驗(yàn)證,畢竟前端的東西用戶都是可以修改的。 |
|
|
來(lái)自: 泳光圖書(shū)館 > 《IT類》