1

クリーンなユーザーが偶発的または意図的なジャンクの入力を送信しました。私はこれを行うために次のように書きました。同じ問題に対するより効率的またはより良い解決策を見たいと思います。 注:mysql側では、これらの後にmysqliプリペアドステートメントを使用します。


最初のケース:ユーザーはUTF-8(ロシア語、トルコ語、英語のみが必要)文字と「_」(ユーザーが入力した「username」をクリーンアップするため) を入力できる必要があります。

入力:

$lang1 = " \  $:;/<ŞĞğş43\24234şğ_Ğüğ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-9\p{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



2番目のケース:英語の文字のみが許可されます。無効な文字およびその他の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';}
}

経由で呼び出された場合:

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


ps-

この電子メール入力フィールドに完全なUTF-8/RFC準拠は必要ありません。また、電子メールに含めることができるすべての可能な特殊文字を含める必要もありません。私はより制限的で、最初の質問で関数が何をするのかとともに何が必要かを述べたほうがいいです。ここでの考え方は、電子メールを検証することよりも、タイプミスのある文字を取り除くことです。オンラインサイトでは、何も修正せずに、エラーをスローするだけです。


-クリーンメール機能の正規表現を更新して、+文字と-文字を含めました。

4

1 に答える 1

2

https://code.google.com/p/owasp-esapi-php/

独自のセキュリティ コントロールを記述しないでください。すべての Web アプリケーションまたは Web サービスのセキュリティ制御を開発する際に一からやり直すと、時間の浪費と膨大なセキュリティ ホールが発生します。OWASP Enterprise Security 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.
于 2012-10-26T17:38:17.590 に答える