在PHP中反垃圾邮件

时间:2010-03-01 18:25:27

标签: php mysql forms spam

嘿伙计们,今天我访问了我的网站,我看到有人在我的故事表中插入超过1000个查询

我的脚本在php / mysql中,我启用了验证码,我想知道他怎么能做这样的事情

一个简单的表单,在另一个函数中,它检查$ vars并验证它们然后插入数据库

我确定他正在使用机器人做这样的事情

我真的很困惑

这是我验证和插入表格

的功能
    function submitStory($name, $address, $subject, $story, $storyext, $topic, $alanguage,$tags) {

        $subject = check_words(check_html(addslashes($subject), "nohtml"));
        $story = check_words(addslashes($story), "nohtml");
        $storyext = check_words(addslashes($storyext), "nohtml");

        $result = $db->sql_query("INSERT INTO ".$prefix."_stories 
            (sid,catid,aid,title,time,hometext,bodytext,newsref,newsreflink,comments,counter,topic,informant,notes,ihome,alanguage,acomm,hotnews,haspoll,pollID,associated,tags,approved,section)
        VALUES
(NULL, '$catid', '', '$subject', now(), '$story', '$storyext', '','', '0', '0', '$topic', '$name', '', '', '$alanguage', '', '', '0', '0', '','$tag_ids','2','news')");

 mysql_error();


        include ('header.php');
        echo "<font class=\"content\"><b>"._THANKSSUB."</b><br><br>"
        .""._SUBTEXT.""
        ."<br>"._WEHAVESUB." $waiting "._WAITING."";

        include ('footer.php');
    }

3 个答案:

答案 0 :(得分:3)

@Mac,

虽然你在少数变量中添加了addslashes,但其余的都暴露在sql注入中。请对所有变量应用mysql_real_escape_string函数,并在列表中包含以下内容:

$catid, $topic, $name, $alanguage, $tag_ids

我建议你强烈地申请mysql_real_escape_string,但如果你真的很急,想要快速修复就可以立即尝试,而不必怀疑mysql_real_escape_string究竟是什么以及它做了什么,然后至少将addslashes应用于function submitStory中我上面提到的变量。

您可以阅读有关mysql_real_escape_string here

的更多信息

希望这会有所帮助。请告诉我们。

答案 1 :(得分:2)

最有可能是SQL injection attack。您应该立即使您的站点脱机,并且在您修复漏洞并仔细检查整个数据库以查找Zeus dropper等恶意软件之前不要重新启用它。

如果您的网站允许用户生成的内容,您还应该仔细过滤它以查找恶意HTML标记,javascript等。

答案 2 :(得分:0)

  1. 一旦有人通过验证码,他们可以发布任何数量的故事吗? (即,现在认为该会议是安全的)。这只能证明他们是人类的第一次尝试......

  2. 有人注册后是否有发布限制?

  3. 您是否为每个注册用户的会话和表单生成了ID,因此他们的凭据无法在XSS中使用?

  4. 如果1为真,或者2和3都为假,则他们绝对可以运行脚本来垃圾邮件。