Que*_*ner 2 php regex security whitelist utf-8
我的目标是通过为从客户端接收的任何和所有POST数据创建一个严格的允许字符白名单来保护我的网站免受攻击。
当停留在ASCII字符内时,这是小菜一碟。就像是:
if(preg_match('/[^aA-zZ0-9]/', $stringToTest))
{
// Battle stations!!
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要能够允许任何和所有utf-8字符,尤其是亚洲字符集,例如日语,中文和韩语。但我不想排除任何古怪的字符,例如阿拉伯文或俄文,或其他。一个世界,一个爱!;)
我如何允许人们输入自己的母语字符,同时排除邪恶的脚本中使用的鼻音,例如*,?,尖括号等?
\w会给您单词字符(字母,数字和下划线),这可能是您追求\s的空白。
例如
if(preg_match('/[\w\s]/', $stringToTest))
{
// Battle stations!!
}
Run Code Online (Sandbox Code Playgroud)
Regular-expressions.info是此材料的绝佳参考- 这里和这里有几个相关页面:)
编辑:还需要一些澄清,对不起!
这是我通常用于CJK的内容:
function get_CJK_ranges() {
return array(
"[\x{2E80}-\x{2EFF}]", # CJK Radicals Supplement
"[\x{2F00}-\x{2FDF}]", # Kangxi Radicals
"[\x{2FF0}-\x{2FFF}]", # Ideographic Description Characters
"[\x{3000}-\x{303F}]", # CJK Symbols and Punctuation
"[\x{3040}-\x{309F}]", # Hiragana
"[\x{30A0}-\x{30FF}]", # Katakana
"[\x{3100}-\x{312F}]", # Bopomofo
"[\x{3130}-\x{318F}]", # Hangul Compatibility Jamo
"[\x{3190}-\x{319F}]", # Kanbun
"[\x{31A0}-\x{31BF}]", # Bopomofo Extended
"[\x{31F0}-\x{31FF}]", # Katakana Phonetic Extensions
"[\x{3200}-\x{32FF}]", # Enclosed CJK Letters and Months
"[\x{3300}-\x{33FF}]", # CJK Compatibility
"[\x{3400}-\x{4DBF}]", # CJK Unified Ideographs Extension A
"[\x{4DC0}-\x{4DFF}]", # Yijing Hexagram Symbols
"[\x{4E00}-\x{9FFF}]", # CJK Unified Ideographs
"[\x{A000}-\x{A48F}]", # Yi Syllables
"[\x{A490}-\x{A4CF}]", # Yi Radicals
"[\x{AC00}-\x{D7AF}]", # Hangul Syllables
"[\x{F900}-\x{FAFF}]", # CJK Compatibility Ideographs
"[\x{FE30}-\x{FE4F}]", # CJK Compatibility Forms
"[\x{1D300}-\x{1D35F}]", # Tai Xuan Jing Symbols
"[\x{20000}-\x{2A6DF}]", # CJK Unified Ideographs Extension B
"[\x{2F800}-\x{2FA1F}]" # CJK Compatibility Ideographs Supplement
);
}
function contains_CJK($string) {
$regex = '/'.implode('|',get_CJK_ranges()).'/u';
return preg_match($regex,$string);
}
Run Code Online (Sandbox Code Playgroud)
要获得所有可能逃逸和其他黑帽问题的信息,请使用:
/[^\p{Punctuation}]/(== /[^\p{P}]/)
要么
/[^\32-\151]/(== /[^!-~]/)