清洁用户提交了意外或有意垃圾的输入。.我写了以下内容来执行此操作,并有兴趣看到对同一问题的更有效或更好的解决方案。注意:我使用 MySqli准备的语句在这些内容的侧面之后。
第一种情况:用户应该能够输入UTF-8(仅俄罗斯,土耳其语,英语是必要的)字符,'_ _',(这是用于用户清洁"用户名"输入)。
输入:
$lang1 = " $:;/<ŞĞğş4324234şğ_Ğüğsdç<a> #$#@!@^%*&^( <b></b>";
$lang2 = "еукд $ :;363 леВАЛДЖЫу-_жлаывф<em>вфы34234</em>вфывф#@!@^%*&^(&*)(()&^@#!~";
$lang3 = "dasda$RWERs636 da<b>asd_45646asd<em>";
为了清洁这些简单的功能
function clean($s = '')
{
$c = mb_strtolower((trim($s)), 'UTF-8');
$c = preg_replace ( '/[^0-9p{Cyrillic}p{Ll}w]/u', '', $c);
$c = htmlentities(strip_tags($c), ENT_QUOTES, 'UTF-8');
return $c;
}
返回我需要的;
şğğş4334şğ_ğüğsdçabb
еукд363левалджыу_жлаывфemвфы34234emвфывф
dasdadabasd_45646asdem
第二种情况:仅允许英文字符,应删除无效的字符和其他UTF-8字符。(这是为了清洁用户的"电子邮件"输入)
输入:
$email1 = "dasda @:;/<ŞĞğ ВАЛДЖЫуda<b>asd_45646asd<em>.com";
$email2 = "^%(#*$#)$&(237469879şşşdsasadsdasd/||><? ВАЛДЖЫуda<b>asd_45646asd<em> .com";
$email3 = "t est i @coЬm.tr";
$email4 = "&/(/&^+'!+!^+<em>test@com.kz()( РЛОкуц <em> ";
$email5 = "++ ?ЕНГКУ teЛОДКУst@mail.уцкru...";
$email6 = " ?ЕНГКУ teЛОДКУst@.уцкua";
$email7 = " ++ fake.some--one+tag@gmail.com++";
这部分是针对电子邮件的,只应接受英语字符,我写了以下功能来清洁和验证;
function clean_email($s = '')
{
$c = mb_strtolower((trim($s)), 'UTF-8');
$c = filter_var(strip_tags($c), FILTER_SANITIZE_EMAIL);
$c = preg_replace ('/(?i)[^a-z.@_-+d]|[.@]{2,}/u', '', $c);
$c = preg_replace ( '/^[+.-@]{1,}|[+.-@]{1,}$/u', '', $c);
return $c;
}
function valid ($v = '')
{
if (filter_var($v, FILTER_VALIDATE_EMAIL) == TRUE) {return 'valid';} else {return 'false';}
}
访问via时:
echo clean_email($email1).' : '.valid(clean_email($email1)).'<br/>';
返回我需要的
dasda : false
dsasadsdasd : false
testi@com.tr : valid
test@com.kz : valid
test@mail.ru : valid
testua : false
fake.some--one+tag@gmail.com : valid
P.S.
- 在此电子邮件输入字段中,我不需要完整的UTF-8/RFC合规性,也不需要包含所有可能包含在电子邮件中的特殊字符。我更喜欢在最初的问题中更加限制和说明,以及该功能的作用。这里的想法更多是要摆脱错误的字符,而不是验证电子邮件,在在线网站中,我宁愿不纠正任何内容,而只是丢下错误。
- 在"干净的电子邮件"功能中更新了正则表达式,以包括 和 - 字符。
https://code.google.com/p/owasp-esapi-php/
不要写自己的安全控件!在为每个Web应用程序或Web服务开发安全控制时,重新发明了车轮会导致时间浪费和大量的安全孔。OWASP企业安全API(ESAPI)工具包可帮助软件开发人员防止与安全相关的设计和实现缺陷。
$email1 = 'fake.someone+tag@gmail.com'; // this is perfectly valid email
echo clean_email($email1).' : '.valid(clean_email($email1));
// outputs: fake.someonetag@gmail.com : valid
// and you'll be emailing the wrong person.