<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="0.92">
<channel>
	<title>MT312 &#187; コメントスパム対策法</title>
	<link>http://www.mt312.com</link>
	<description></description>
	<lastBuildDate>Tue, 15 Apr 2008 05:43:06 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>ja</language>
	
	<item>
		<title>コメントスパム対策法</title>
		<description>近年スパム被害が増えています。
誰でも投稿できるブログや掲示板も狙われています。
ここでは手間のかからない、簡単な対処法をいくつか紹介します。

	主な対処法

	禁止ワードを設定
	日本語が使えない環境からの投稿を拒否
	半角英数字のみの投稿を拒否
	投稿できるURLの数を制限
	プロキシサーバ経由の投稿を拒否
	リファラーを参照してフォームを経由したか判断
	フォームを表示してから投稿するまでの許容時間を設定する
	ダミー項目を作り入力があった場合に拒否
	フォームを解析されない様に、ロボットを排除
	データ送信先を頻繁に変更
	Captcha画像認証



検索ロボットを排除
[html]



[/html]
ロボットを完全に排除するのは難しい様ですが、少しは効果があると思います。googlebotのsnippetは検索結果に表示される該当ページからの抜粋です。これがある方がクリック率が高まるそうです。これを削除(nosnippet)するとキャッシュも削除されます。

Googleページ削除
リファラーからフォームを経由したか調べる
[php]
$from = $_SERVER['HTTP_REFERER'];
$host = $_SERVER['HTTP_HOST'];
if(!stristr($from, $host)) {
  print '不正なリファラーです。';
}
[/php]
リファラーを持たない環境は結構あります。ノートン等のセキュリティソフトによって隠蔽されている可能性もあります。ドコモなど一部携帯でアウト。
逆引き不可能なIPアドレスを拒否
[php]
$ip = $_SERVER['REMOTE_ADDR'];
$host = getHostByAddr($ip);
if($ip==$host) {
  print '逆引き不可能なIPアドレスです。';
}

// これでも可能
if(!preg_match('/[a-z]/', $host)) {
  print '逆引き不可能なIPアドレスです。';
}
[/php]
プロキシ経由を拒否
プロキシ特有の環境変数とホスト名を調べる方法です。
環境変数を吐かない匿名プロキシもあって、すべてを検出できる訳ではありません。
他にはプロキシリストを作成したり、ポートスキャンする方法もあります。
[php]
$systems = $_SERVER + $_ENV;

$ip = $systems['REMOTE_ADDR'];
$host = getHostByAddr($ip);
// ドコモの携帯はproxyが存在するので注意
// anonym=anonymous,anonymizer
// prox=proxy,proxify
$proxhost = preg_match(
'/anonym&#124;cache&#124;delegate&#124;firewall&#124;gateway&#124;httpd&#124;keeper&#124;prox&#124;squid&#124;via&#124;www/',
$host);

$bools = array(
  isset($systems['HTTP_CLIENT_IP']),
  isset($systems['HTTP_FORWARDED']),
  isset($systems['HTTP_MAX_FORWARS']),
  isset($systems['HTTP_PROXY_CONNECTION']),
  isset($systems['HTTP_SP_HOST']),
  ...</description>
		<link>http://www.mt312.com/php/40/</link>
			</item>
</channel>
</rss>
