【问题标题】:Prevent query insert spam防止查询插入垃圾邮件
【发布时间】:2015-08-23 08:50:43
【问题描述】:

我有一个评论系统,用户可以在其中发布他们对某些事情的看法,但是如果您按“发布!”多次按钮,多个查询被插入到数据库中,结果是垃圾邮件。

这是我的代码:

if(!empty($_POST["artcomment"])) {
    $postComment = $DB->real_escape_string($_POST["artcomment"]);
    $poster = $dbuser;
    $postDate = date("Y-m-d H:i:s");
    $attachId = $id;

    $prepareComment = $DB->prepare("INSERT INTO article_comments (attach_id, comment, poster, date) VALUES ('".$attachId."', '".$postComment."', '".$poster."', '".$postDate."')");
    $addComment = $prepareComment->execute();
}

现在我想知道是否可以设置 60 秒的时间限制,就好像他们运行一次查询(单独!)你必须等待 60 秒才能再次执行查询。我看过set_time_limit(),但我不完全确定它是如何工作的。

【问题讨论】:

标签: php mysqli spam time-limiting


【解决方案1】:

您可以将上次查询的时间戳存储到会话中,然后在收到新请求时进行比较。

session_start();
$limit = 60;
$reqEpoch = time();
$ts = (isset($_SESSION['ts'])) ? $_SESSION['ts'] : $reqEpoch;

if ($ts < $reqEpoch - $limit) {
    // run query

    $_SESSION['ts'] = time();
}

【讨论】:

  • 好主意。会试试看!
  • 试过你给我的代码,每当我尝试添加评论时,它不允许我添加评论,我还没有发布任何内容。销毁会话并重试时无效。
  • 它停止工作,我没有改变任何东西。 if 语句似乎失败了。有什么帮助吗?
猜你喜欢
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2012-12-06
  • 2017-02-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多