PHP 2022年10月06日 02:04   編集
掲示板PHPスクリプトです。
利用者に負担をかけずにスパム対策するというのがコンセプトで、以下の対策をとっています。

bbs.phpのスパム対策

ダミーフィールドからの投稿
スパム投稿はフォームのHTMLを解析して値を送信してくるため、CSSで非表示にしたフィールドのデータも送信する場合がある。その場合はスパムと判断して拒否する。
フォームIDのチェック
ブラウザで投稿フォームを表示するたびにユニークな投稿IDを生成し、そのIDを正しく送ってこない投稿を拒否する。フォームを表示せず、直接クエリ送信で投稿しようとするスパムを防ぐ。
投稿時間のチェック
フォームを表示してから投稿ボタンを押すまでの時間が早すぎるとロボットの投稿と判断して拒否
スライドロック
JavaScriptで表示されるボタンをスライドしないと投稿ボタンが押せず、投稿を受け付けないことによって、ロボットからの投稿を拒否する。
純粋なロボットによる投稿だと上記の対策でそこそこ効果がありますが、突破してくる投稿も多いので、以下の対策も追加しています。
ひらがなチェック
コメントにひらがなが連続2個以上含まれていないと投稿拒否
外国語の投稿をブロックするため。通常の日本語の文章なら、少なくともひらがな2個以上は含まれるはず
タイトルにURL
タイトルにURLが入っているスパムが多いため。
URL3個以上
URLを羅列するタイプの投稿を防ぐため。
禁止用語
禁止ワードを含む投稿を拒否する。
拒否IP
登録したIPアドレスからの投稿やアクセスを拒否する。

タグの使用について

管理者設定で記事で許可するタグを指定できるようになっていますが、ver.1.059でその際の挙動を変更しました。タグの使用を許可した場合でもタグ内に入れられるのはタグ名と閉じタグに使用する/(スラッシュ)だけということにしました。たとえばstrongタグを許可した場合、使用できるのは
<strong>これは有効</strong>
のような指定で、
<strong style="color:red;">こういう指定はダメ</strong>
という指定はNGということです。使用できるタグを利用してよからぬことを書かれてしまうのを避けるためです。
それと、開始タグの後に閉じタグが存在しないと有効にならないようにしました。タグの閉じ忘れで後続の記事のレイアウトなどに影響が出ないためです。
<strong>閉じタグが存在しないと有効にならない。
のように閉じタグがないとタグとして機能しません。なので通常閉じタグを使わないようなタグは使用許可しないでください。imgとかinputとか。まあタグ名しか入れられないので、許可しても意味がありませんが。
投稿時に許可タグのみを有効にしてログに保存しているので、タグ名以外の記述も許可していたバージョンで投稿された記事のタグは、再編集しない限り有効なままです。投稿時・再編集時の処理は、すべての<、>をそれぞれ&lt; &gt;に変換した後、許可されたタグについて
$html = preg_replace('/&lt;(' . 許可タグ . ')&gt;([\s\S]*?)&lt;\/(' . 許可タグ . ')&gt;/', '<$1>$2</$3>', $html);
というような処理をしています。
タグを許可した場合、投稿フォームに使用できるタグ名を表示するようにしました。利用を想定しているのはpreタグで、preタブ内にプログラムコードなどを入れると、タブによるインデントもそのまま表示されるようにしています。サポート掲示板などで、コードをそのまま表示したいような場合に使えます。

counter:1,035