- 追加された行はこの色です。
- 削除された行はこの色です。
*.jp以外のドメインからの投稿を禁止する [#c08452e9]
スパム投稿のほとんどは海外から行われます。投稿もとのドメインを調べて、海外からの投稿であると判断できれば、投稿を拒否することは、スパム対策として有効です。
スパム投稿のほとんどは海外から行われます。投稿もとのドメイン名(ホスト名)を調べて、海外からの投稿であると判断できれば、投稿を拒否することは、スパム対策として有効です。
例えば、[[OTD掲示板>http://blog.livedoor.jp/bbsnews/archives/50328205.html]]では、次のようなドメインからの投稿を規制しているということです。
.ae .ar .at .au .be .bg .bk .bn .br .by .ca .cc .ch .cl .cn .co .cr .cz .de~
.dk .do .ee .es .eu .fi .fm .fr .gr .hk .hr .hu .id .ie .il .in .is .it .ke~
.kg .kr .mu .mx .my .nl .nu .nz .om .ph .sa .se .sg .si .sk .sv .th .tt .tw~
.ua .uk .us .uy .pe .pk .pl .ru .ro .ve .za
ここでは、投稿もとのドメイン名を調べ、.jp以外のドメインからの投稿を禁止する方法を説明します。なお実際には、.jp以外が全て国外からの投稿であるとは限りませんので、.jp以外を無条件で拒否するのは危険です。
なお、IPアドレスから国を調べる方法は、「[[不正アクセスの発信地の国別統計をとろう!>http://www.nminoru.jp/~nminoru/memo/ip-address/what_country_from.html]]」で紹介されています。
**Perl [#uea445cf]
まず、Perlのコードを示します。
#code(perl){{
#ホスト名の取得
$remote_addr = $ENV{'REMOTE_ADDR'};
$remote_host = $ENV{'REMOTE_HOST'};
if (!$remote_host || $remote_host eq $remote_addr)
{
$remote_host = gethostbyaddr(pack('C4',split(/\./, $remote_addr)),2);
}
#ホスト名が取得できなかった時
if (!$remote_host || $remote_host eq $remote_addr)
{
print 'ホスト名の逆引きができないホストからの投稿は禁止されています。';
exit;
}
#ホスト名が許可されたものか調べる
#ここでは、.jpドメインだけを許可する
if ($remote_host !~ /\.jp$/)
{
print '.jpドメイン以外のホストからの投稿は禁止されています。';
exit;
}
print 'ホストは.jpドメインです。';
}}
**PHP [#k1972fdd]
次にPHPのコードを示します。
#code(php){{
//ホスト名を取得する
$remote_host = $_SERVER['REMOTE_HOST'];
if (empty($remote_host) || $remote_host == $_SERVER['REMOTE_ADDR'])
{
$remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
}
//ホスト名が取得できなかった時
if ($remote_host == $_SERVER['REMOTE_ADDR'])
if (empty($remote_host) || $remote_host == $_SERVER['REMOTE_ADDR'])
{
exit('ホスト名の逆引きができないホストからの投稿は禁止されています。');
}
//許可されたホストか調べる
//ここでは、.jpドメインだけを許可する
if (!preg_match('/\.jp$/', $remote_host))
{
exit('.jpドメイン以外のホストからの投稿は禁止されています。');
}
exit('ホストは.jpドメインです。');
}}
**C# [#r7945f9f]
ASP.NETのC#のコードは、次のようになります。
#code(csharp){{
protected void Page_Load(object sender, EventArgs e)
{
//ホスト名を取得する
string hostName = Request.UserHostName;
if (hostName == "" || hostName == Request.UserHostAddress)
{
hostName = System.Net.Dns.Resolve(Request.UserHostAddress).HostName;
}
//ホスト名が取得できなかった時
if (hostName == "" || hostName == Request.UserHostAddress)
{
Label1.Text =
"ホスト名の逆引きができないホストからの投稿は禁止されています。";
return;
}
//許可されたホストか調べる
//ここでは、.jpドメインだけを許可する
if (!System.Text.RegularExpressions.Regex.IsMatch(hostName, "\\.jp$"))
{
Label1.Text =
".jpドメイン以外のホストからの投稿は禁止されています。";
return;
}
Label1.Text = "ホストは.jpドメインです。";
}
}}
//これより下は編集しないでください
#pageinfo(,2007-05-14 (月) 01:31:04,DOBON!,2007-06-23 (土) 02:11:36,DOBON!)
#pageinfo(,2007-05-14 (月) 01:31:04,DOBON!,2007-06-25 (月) 01:21:11,DOBON!)