在寫網站的使用者名稱驗證,叫玩滲透的朋友測試。 。然後給我來了個控製字符的輸入(雖然沒啥關係,但是,還是有影響。貌似在sf上面的正則也不起作用。還有,PHP perl怎麼使用uncode?
如下測試:
<code class="php"><?php $str=json_decode('"ux\u202eDD"'); var_dump($str); var_dump(preg_match('/\x202e/', $str));</code>
無法匹配(註:u202e 為RLO控製字符)
違禁字符 測試:功輪法
字符序為 RLO
功輪法
貌似控製字符鑽的空子蠻多?
貼吧已經屏蔽了控製字符,不過,我能力有限,沒有找到相關的控制JS的REX。
特來sf求助。
PS:使用者名稱中文沒用 /^[x4e00-x9affw]{4,12}$/
在寫網站的使用者名稱驗證,叫玩滲透的朋友測試。 。然後給我來了個控製字符的輸入(雖然沒啥關係,但是,還是有影響。貌似在sf上面的正則也不起作用。還有,PHP perl怎麼使用uncode?
如下測試:
<code class="php"><?php $str=json_decode('"ux\u202eDD"'); var_dump($str); var_dump(preg_match('/\x202e/', $str));</code>
無法匹配(註:u202e 為RLO控製字符)
違禁字符 測試:功輪法
字符序為 RLO
功輪法
貌似控製字符鑽的空子蠻多?
貼吧已經屏蔽了控製字符,不過,我能力有限,沒有找到相關的控制JS的REX。
特來sf求助。
PS:使用者名稱中文沒用 /^[x4e00-x9affw]{4,12}$/
翻完了PHP Manual ,找到了匹配的模式,,,中文,a-zA-Z_,匹配正則:/[wx{4e00}-x{9aff}]{4,12}/u
測試:
<code class="php"><?php $str=json_decode('"ux这\u202eわかぃまぃだDD"'); var_dump($str); var_dump(preg_match('/^[\w\x{4e00}-\x{9aff}]{4,12}$/u', $str,$match)); var_dump($match);</code>
中文和日文應該都沒問題了,要開啟utf-8模式。
在UTF-8模式,「x{…}」允許使用, 花括號內的內容是十六進位有效數字。 它將給出的十六進制數字解釋為 UTF-8 字元代碼。
u (PCRE_UTF8)
此修正符開啟一個與 perl 不相容的附加功能。 模式字串被認為是utf-8的. 這個修飾符 從 unix 版php 4.1.0 或更高,win32版 php 4.2.3 開始可用。 php 4.3.5 開始檢視模式的 utf-8 合法性。
問題結束,不明白為啥沒大為回答。