2009-09-15 139 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:标题

相关问题