プロジェクトのコメント セクションを作成しました。しかし、それには「セキュリティ」が欠けていると思いますか?
1) 好きなだけコメントできます。
2) 類似コメントは無効化されていません。
PHPにそういうものがあるのだろうかと思っています。
コメントをデータベースに保存する必要があります。行が重複している場合、このように一意のインデックスを追加できます
ALTER IGNORE TABLE comments ADD UNIQUE INDEX comment_name (id, name );
1) 日付/時刻の値がデータベースに保存されている場合、「最後のコメントがあったとき」の時刻と、ユーザーが新しいコメントを追加しようとした実際の時刻を検証できます。
ただし、この検証をプレゼンテーションに追加したい場合は、セクションを一時的に非表示/無効にして、このセクションを表示/有効にすることができます。
2) コメント セクションでの重複エントリを避けたい場合は、コンテンツまたはタイトルがデータベースと同じでないかどうかを検証します。
最初の検証 (たとえば、時間が 5 秒の場合) を行い、再度コメントするのが正しい場合は、コメントが同じかどうかを検証すると思います。
コメントを処理してデータベースに挿入するコードの場合、(a) 過去 X 分間に同じ人がコメントしたかどうかを確認するか、(b) 同様のコメントがあるかどうかを確認するためのチェックを追加する必要があります。
(a) 実装は非常に簡単です。user_id
ここでは、 の列との列を使用してデータベースにコメントを保存していると想定していますtimestamp
。次に、クエリを実行して、そのユーザーが制限時間内に既にコメントを残しているかどうかを確認できます (この例では、2 分に設定しましょう)。
SELECT * FROM `comments` WHERE `user_id`='{$user_id}' AND DATE_SUB(NOW(), INTERVAL 2 MINUTE) < `timestamp`
そのクエリを実行して行が返された場合、そのユーザーが 2 分以内にコメントを残したことがわかります。
(b) コメントが「類似」であるとはどういう意味かを実際に指定しなかったという事実以外に何もない場合は、より困難です。キーワードまたはレーベンシュタインなどの文字列比較関数を使用して、テキストの類似性をチェックできます。(a) と同じロジックに従い、データベース クエリを実行して類似性をチェックし、必要に応じてエラーを報告します。
上記のチェックに一致する行が見つからない場合は、コメントをデータベースに安全に挿入できます。それ以外の場合は、ユーザーにエラーを報告するか、どのように処理したいかを報告できます。
より具体的に説明すると、誰かがあなたをさらに助けることができると確信しています。
そのようなことを自分で実装する必要があります。そのために PHP セッションを使用することをお勧めします。