首頁  >  文章  >  後端開發  >  javascript - PHP正規 去除uncode 控製字元的正規

javascript - PHP正規 去除uncode 控製字元的正規

WBOY
WBOY原創
2016-10-10 11:55:541222瀏覽

在寫網站的使用者名稱驗證,叫玩滲透的朋友測試。 。然後給我來了個控製字符的輸入(雖然沒啥關係,但是,還是有影響。貌似在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 合法性。
問題結束,不明白為啥沒大為回答。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn