November 27, 2004
最近、コメントスパムが3日置きに20個ぐらいやってきて、削除するとそのお礼参りが返ってくるような気がしてきて、反撃が大きくならないうちに下記のサイトを参考にして、とりあえずプレビューを経由しないとコメント登録できないようにする対策をしました。
プレビューボタンのみ表示してhashを仕込むというコメントスパム対策
ただ、この対策ですが以下の問題にぶちあたりました。
その前に一言お断り。すいません、↑のサイトも、その元の引用元サイトも、あまり読まないで、長斜め読みで作業してるので、以下に書いたことは僕の勘違いであることも含めて記述しておきますので、その辺は、笑ってご容赦を。
問題1.プレビュー後の登録ボタン送信後に、メールアドレスのチェックでエラーになるとハッシュ値が維持されずにコメント登録ができなくなる。
問題2.プレビュー画面で、メールアドレス等を変更し、そのまま登録ボタンを送信するとハッシュ値と整合が取れなくなってコメント登録ができなくなる。
問題3.MT::App::Comments=HASH(0x8133864) Use of uninitialized value in string ne at extlib/jayallen/MTBlPost.pm line なんつう警告が出ている。通常の登録フローでは画面がリダイレクトしているので気が付かないですが、ちゃんと警告自体は出ています。見えないだけで。
問題1の対策:
問題は、プレビューエラーのテンプレートにハッシュ値がうまく渡されないのが原因で、よくわからないんでカスタムタグ作ってハッシュ値を渡していこうかと思ったのですが、Perlの文法は僕には謎すぎるので諦めました。
仕方ないので、「前に戻る」で一番最初の画面まで戻ってもらって直してもらうしかないかなと。
同時にプレビュー画面で編集できないようにしました。
ただ、メールアドレスのエラーなどが発覚するのが確認画面の後という本来ありえない画面フローになっているのでプレビューボタンが押されたときの処理で、メールアドレスのチェック処理を走らせてエラー画面に飛ばす制御をしないと、おかしいです。これは課題。
問題2の対策:
ハッシュ値の考え方が、プレビュー画面での編集後の再送信に対応していないのが、そもそもの原因。
だから仕方ないです。問題1と同じ対策で解決
問題3の対策:
なんか、このエラーをぐぐると、まぁいいやとか、そもそものエラーを表示しないように隠蔽するとか、一般的に、まともに解決してない人が多いですね。
エラーメッセージの通り、初期化されてない変数を使うなゴルァという警告なのですから、自分のプログラムで使われていない変数を削除すればOK
今、元の元の引用元を見ると、これは自分用の特別な変数だから、この変数は消してねって色も変わって書いてあるじゃん(笑)
あー時間の無駄をしてしまった。ちゃんと原文も読みましょうってことでつね。
つーことでエラーが出る以下の部分は不要なので削除しませう。
「. $q->param('subject') . $q->param('convert_breaks')」
さすれば、このエラーは消えます。
多分、まだこの戦いは続きそうな気がするから、タイトルには、「1」とつけておきました。これで解決したら2はありません。そのことを祈るだけです。