2011-12-10 54 views
0

我是一個絕對的PHP初學者,試圖設置一個驗證來停止在聯繫表單上的頭注入。我已經閱讀了很多教程,並做了一個應該驗證的表單,但它不工作......在這裏稍微研究一下之後,我的問題是我的代碼使用了eregi(舊教程),它應該是preg_match這些天。我已經使用preg_match來驗證電子郵件地址格式,但我想確保沒有換行符,cc,密件抄送等可以在任何地方進行竊取。 這是我現在具備的功能:preg_match防止以PHP格式注入

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像這樣只需更換eregi:

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

我已經在這裏讀preg_match需要分隔符,不知道我是否正確使用它們。另外,應該是區分大小寫的,所以我添加了i標誌(沒有信心)。但是,如果真的沒有真正的想法實際上是正確的。這看起來安全嗎?再次,道歉我缺乏PHP知識。這種功能在在線教程中很常見,但使用eregi而不是preg_match。

回答

0

只是檢查換行符應該足夠:

$possiblespam = (0 !== preg_match("~(\r|\n)~", $field));