2011-12-10 4 views
0

私は、PHPの初心者で、コンタクトフォームでヘッダインジェクションを停止するための検証を設定しようとしています。私は多くのチュートリアルを読んだことがありますが、検証する必要があるフォームを作ったが、それは動作していません...ここで少し研究した後、私が使用しているコードはpreg_matchでなければならないeregi(旧チュートリアル)最近。 preg_matchを使用して電子メールアドレスの形式を検証しましたが、改行、CC、BCCなどがどこにも存在しないことを確認したいと思います。preg_match PHPフォームへの注入を防止する

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

を私はここに読んだことがある:私はちょうどそのようにするpreg_matchでeregiを置き換えることができれば、私はわからないんだけど、今

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; 
} 

}

: これは私が今持っている機能ですpreg_matchにはデリミタが必要ですが、私が正しく使用したかどうかは分かりません。また、大文字と小文字を区別する必要があるので、iフラグを追加しました(自信なし)。それでも、上記のことが実際に正しいかどうかについての実際の考えはありません。それは安全と思われますか? PHPの知識が不足していることについて再度お詫び申し上げます。この種の関数は、オンラインチュートリアルではかなり一般的ですが、preg_matchではなくeregiを使用しています。

答えて

0

だけで改行をチェックするだけでは十分でなければなりません:

$possiblespam = (0 !== preg_match("~(\r|\n)~", $field)); 
関連する問題