0

嘿伙计们,今天我访问了我的网站,我看到有人在我的故事表中插入了 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');
    }
4

3 回答 3

3

@苹果电脑,

尽管您在少数变量中添加了斜杠,但其余变量都暴露在 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 的更多信息

希望这可以帮助。让我们知道。

于 2010-03-01T18:52:29.663 回答
2

很可能是SQL 注入攻击在修复漏洞并仔细检查整个数据库中是否存在恶意软件(例如 Zeus dropper)之前,您应该立即使您的站点脱机并且不要重新启用它。

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

于 2010-03-01T18:44:42.593 回答
0
  1. 一旦有人通过了验证码,他们可以发布任意数量的故事吗?(即,现在认为该会话是安全的)。这只能证明他们是人类的第一次尝试……

  2. 一旦有人注册,是否有发布限制?

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

如果 1 为真或 2 和 3 为假,他们绝对可以运行脚本向数据库发送垃圾邮件。

于 2010-03-01T19:04:22.143 回答