0

Web サイトの強力なサーバー側検証を作成したいと考えています。特に、1 人のユーザーが投稿に複数回コメントするのを防ぐためです。または、単一のデータをデータベースに複数回送信しないようにします。このため、最後の対話の後、1 人のユーザーがデータベースと対話するために 10 秒間ブロックされると、より良いと思いました。

1> このエラーまたはサーバー側からのスパム保護を防止する他の方法はありますか?

2> 投稿時刻を保存し、データベースの現在時刻とその時刻を照合して次のインタラクションの空き状況を確認してもよろしいですか、それとも別の方法がありますか?

この小さな研究で私を助けてくれてありがとう!

4

3 に答える 3

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

Web サイトの強力なサーバー側検証を作成したいと考えています。特に、1 人のユーザーが投稿に複数回コメントするのを防ぐためです。

データベース側での一般的な用語は制約です。投稿ごとに各ユーザーのコメントを 1 つに制限する場合は、主キー制約または一意制約を使用します。たとえば、「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)

または、単一のデータをデータベースに複数回送信しないようにします。

その要件には、いくつかの異なる意味が想像できます。質問を編集して、さらに詳細を追加することをお勧めします。

このため、最後の対話の後、1 人のユーザーがデータベースと対話するために 10 秒間ブロックされた方がよいと考えました。

これら 2 つの「要件」は、根本的に異なることを意味します。

  • ユーザーを投稿ごとに 1 つのコメントに制限し、投稿ごとに 1つのコメントのみに制限したいと考えています。
  • 投稿ごとに 10 秒ごとに 1 つのコメントにユーザーを制限したいと考えています。したがって、ユーザーが忍耐強い場合は、投稿ごとに 137 コメントを入力できるようにしたいと考えています。

これは、バックエンドでトリガーを使用するか、フロントエンドでアプリケーション コードを使用して実行できます。SQL データベース管理システムは、行間またはテーブル間の宣言的制約をまだ一般的にサポートしていません。

于 2013-11-08T15:27:28.687 に答える
0

特に、1 人のユーザーが投稿に複数回コメントするのを防ぐためです。または、単一のデータをデータベースに複数回送信しないようにする

これをデータベース層で適用するのは簡単です (リレーショナル データベースを使用していると仮定します)。これを制御するロジックを PHP で作成することもできますが、これは複雑で不要です。

またはサーバー側からのスパム保護?

はい、もちろん、サーバー側でデータを検証できますが、達成しようとしていることについてもう少し具体的にする必要があります。Spamassassin や Akismet など、非常に洗練され、十分にテストされ、PHP に簡単に統合できるツールがたくさんあります。

于 2013-11-08T09:40:34.297 に答える