2009-09-15 40 views
0

以下代碼包含一些允許用戶向其他人發送電子郵件邀請的PHP代碼。它工作正常。但是,我試圖添加一個名爲「check_porn_terms」的函數,以便任何用戶都不能輸入他們的名字作爲「色情」或其他粗俗術語,然後以該名稱發送一封電子郵件,推薦我的網站。變量「$ _POST ['sendername']」是用戶的名字。阻止來自電子郵件邀請的粗俗術語

下面的功能不起作用。任何想法如何讓它工作?

由於提前,

約翰

function check_porn_terms($input) { 
    $porn_terms = array("porn", "sex", "etc."); 

    return !preg_match('#\b(' . join('|', array_map('preg_quote', $porn_terms)) . ')\b#i', $input); 
} 


$sendername = $_POST['sendername']; 
$sendername = strtolower($sendername); 

if(!check_porn_terms($sendername)) 
{ 

    session_write_close(); 
    header("Location:http://www.site.com/friends.htm"); 
    exit; 

} 

$msg = "<html><body>Hello, your friend ".htmlspecialchars($_POST['sendername'])." recommends that you use <a href='http://www.site.com/'>Site.com</a><br><br><img src='http://site.com/images/blacklogo.PNG'></body></html>"; 
$subject = "Try out Site.com"; 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'From: ' . $_POST['sendername'] . "\r\n"; 
foreach($_POST['email'] as $email){ 
mail($email, $subject,$msg,$headers); 
} 
+5

一個clbuttic參考這種方式來... – JohnFx 2009-09-15 23:52:09

+0

我不得不GOOD「clbuttic」...好笑。 – John 2009-09-15 23:59:38

+0

我質疑將腳本放在您網站上的含義。基本上,你可以在這裏獲得它的方式,我可以提出一個請求,如果需要的話,你會發送這封電子郵件給成千上萬的人。 – notJim 2009-09-16 00:07:19

回答

0

我想通了:我不得不添加

ob_start(); 

在代碼的頂部,在標題中。我認爲這是因爲我正在使用這個:

header("Location:http://www.site.com/friends.htm"); 
5

你正在試圖阻止這一點,如上面的clbuttic參考所述。即使你獲得上述代碼的工作,它也可以很容易地避開,你會不斷地與這場戰鬥作鬥爭,並且你會不經意地造成阻礙好詞的副作用。你可能想重新考慮一下你的策略。

閱讀這些對於這方面的一些想法:

http://thedailywtf.com/Articles/The-Clbuttic-Mistake-.aspx

http://www.codinghorror.com/blog/archives/001176.html

你要知道,我認爲這是令人欽佩的,以試圖阻止粗俗,我很想知道在一個更好的技術解決這個問題的軟件世界......(我相信有人會想出更好的方法)。

+0

函數如何繞過? – John 2009-09-16 00:08:52

+0

就你而言,我知道你將它限制在單詞界限和名稱域,所以它的範圍受限得多。但是,不知道sendername字段的可能性,我相信你可能會遇到問題。如果有人使用JoePornoStar ....怎麼辦?如果這是發送電子郵件邀請的人,爲什麼允許發件人姓名?如果你有這樣的設置,將其設置爲用戶名全名....只是對它的一些想法.... – klabranche 2009-09-16 00:16:34

+0

這裏有幾個給你:「熱s3x」「熱六」「熱s * x「」hot sx「」hot sxe「」hotsex「等等。等等。只要我說如果我是一個垃圾郵件發送者試圖用你的表格發送色情垃圾郵件,我就可以小心地想出一百個未經過濾的變體任何你過濾的詞。 – 2009-09-16 00:17:23

0
function check_porn_terms($input) { 
    $porn_terms = array("porn", "sex"); 
    $r = '`(' . implode('|', array_map('preg_quote',$porn_terms)) . ')`is'; 
    $ok = preg_match($r, $input,$m); 
    return !$ok; 
} 

通常我不使用\b(單詞邊界)來匹配單詞。 是的,可能是your Location:標題

相關問題