MovableType の管理画面からログを見ると、検索フォーム宛に大量のコメントスパムが撃ち込まれているのに気が付きました。最近のコメントスパムはフォームと見ると見境なしに POST してくるようです。
意味のない検索が実行されるだけで、スパムコメントを残されるなどの目に見える実害はありませんが、検索 CGI が連続して呼び出されることでサーバ負荷が高くなるという心配があります。そこで、以前に公開したのと同様の方法で、JavaScript を用いて検索 CGI への爆撃対策をしてみました。
一般的なスパムボットは HTML 中の JavaScript を処理できないことを利用して、JavaScript を用いて検索フォームが POST される時に呼び出される CGI 名を隠蔽しています。
いずれJavaScriptを解析できるような高性能なスパムボットが登場するまでは効果てきめんです。
<h2>記事検索</h2> <form name="searchbox" method="post" action="/htdoc/403.php"> <input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" /> <input type="hidden" name="SearchElement" value="entries" /> <input type="hidden" name="SearchSortBy" value="created_on" /> <input type="hidden" name="ResultDisplay" value="descend" /> <input type="hidden" name="SearchCutoff" value="65536" /> <input type="hidden" name="MaxResults" value="50" /> <input id="search" name="search" size="20" value="<$MTSearchString decode_url="1" encode_html="0"$>" /> <input type="submit" value="検索" /> </form> <script language="JavaScript" type="text/javascript"> document.searchbox.action = [ "<$MTCGIPath$>", "<$MTSearchScript$>" ].join(""); </script> <noscript> 検索機能を利用するにはブラウザのJavaScriptを有効にしてください。 </noscript>
フォームの action
属性にはエラーとなるファイルを指定しておき、JavaScript を用いて正しい検索 CGI を呼び出せるように action
を書き換えています。
PC用のブラウザであれば特に問題なく機能しますが、その一方で JavaScript に対応していないテキストブラウザや携帯電話には不便を強いることになります。サイトの特性やユーザの使用状況を考慮した上で適用くださいませ。