0

私は PHP のまったくの初心者で、コンタクト フォームでのヘッダー インジェクションを停止するための検証を設定しようとしています。私は多くのチュートリアルを読み、検証する必要があるフォームを作成しましたが、機能していません...ここで少し調査した後、私の問題は、コードが eregi (古いチュートリアル) を使用していることであり、これは preg_match である必要がありますこの日。preg_match を使用して電子メール アドレスの形式を検証しましたが、改行、cc、bcc などがどこにも入り込まないようにしたいと考えています。これは私が今持っている機能です:

    function spamcheck($field) {
if(eregi("to:",$field) || eregi("cc:",$field) || eregi("Content-Type:",$field) || eregi("bcc:",$field) || eregi("%0D",$field) || eregi("\r",$field) || eregi("\n",$field) || eregi("%0A",$field)){ 
    $possiblespam = TRUE;
}else $possiblespam = FALSE;
if ($possiblespam) {
    die("Possible spam attempt detected. If this is not the case, please edit the content of the contact form and try again.");
    return 1;
}

}

さて、次のように eregi を preg_match に置き換えることができるかどうかはわかりません。

     if(preg_match("/to:/i",$field) 
     // and so on for each string I want to catch

preg_match には区切り文字が必要であることをここで読みましたが、それらを正しく使用したかどうかはわかりません。また、大文字と小文字を区別する必要があるため、i フラグを追加しました (自信なし)。それでも、上記が実際に正しいかどうかはわかりません。それは安全だと思いますか?繰り返しますが、PHP の知識が不足していることをお詫びします。この種の関数はオンライン チュートリアルではかなり一般的ですが、preg_match ではなく eregi を使用します。

4

1 に答える 1

0

改行をチェックするだけで十分です。

$possiblespam = (0 !== preg_match("~(\r|\n)~", $field));
于 2012-08-06T23:00:19.297 に答える