0

我想为我的网站创建一个强大的服务器端验证。特别是为了防止单个用户多次评论帖子。或者防止多次向数据库提交单个数据。为此,我认为如果单个用户在最后一次交互后被阻止 10 秒与数据库交互会更好。

1>有没有其他方法可以防止服务器端出现此错误或垃圾邮件保护?

2>是否可以存储发布时间并通过匹配当前时间和数据库上的时间来检查下一次交互可用性还是有其他方式?

预先感谢您在这项微小的研究中帮助我!

4

3 回答 3

0

特别是为了防止单个用户多次评论帖子。或者防止多次向数据库提交单个数据

这在数据库层执行起来很简单(假设您使用的是关系数据库)。您可以在 PHP 中构建逻辑来控制它 - 但它既复杂又不必要。

还是服务器端的垃圾邮件保护?

是的,您当然可以在服务器端验证数据 - 但您需要更具体地了解您想要实现的目标。有很多工具,如 Spamassassin 和 Akismet,它们非常复杂、经过良好测试并且易于集成到 PHP 中。

于 2013-11-08T09:40:34.297 回答
0

如果应该停止用户,请使用 Eloquent 事件并返回 false。

Comment::creating(function()
{
   // Check if the user has posted another comment within the last 10 seconds
   // e.g.:
   if (Comment::where('user_id', $userId)->where('created_at', '>=', Carbon::now()->subSeconds(10))->count()) return false;
});
于 2013-11-08T09:15:06.420 回答
0

我想为我的网站创建一个强大的服务器端验证。特别是为了防止单个用户多次评论帖子。

数据库端的通用术语是约束。如果您想将每个用户限制为每个帖子一条评论,您可以使用主键约束或唯一约束。例如,如果您有一个名为“comments”的表,该表可能包含

  • 对帖子表的外键约束(因为评论是关于特定帖子的)和
  • 对用户表的外键约束(因为每个评论都来自特定用户)。

    Table: comments
    post_id    user_id
    --
    1          1
    1          2
    1          3
    2          7
    

primary key (post_id, user_id)使用或强制执行该约束unique (post_id, user_id)

或者防止多次向数据库提交单个数据。

我可以想象该要求的几种不同含义。您可能想要编辑您的问题,并添加更多详细信息。

为此,我认为如果单个用户在最后一次交互后被阻止 10 秒与数据库交互会更好。

这两个“要求”意味着完全不同的东西。

  • 我想将用户限制为每篇文章一条评论,每篇文章只有一条评论。
  • 我想将用户限制为每 10 秒发布一条评论。因此,如果用户有耐心,我想让他们在每个帖子中输入 137 条评论。

这可以通过后端的触发器或前端的应用程序代码来完成。SQL 数据库管理系统通常还不支持行之间或表之间的声明性约束。

于 2013-11-08T15:27:28.687 回答