DoboWiki
Top
>
自由区
>
スパム対策
> .jp以外のドメインを禁止
自由区/スパム対策/.jp以外のドメインを禁止 の編集
*.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 (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ドメインです。"; } }} **.htaccessで制限する [#lfeda95c] .htaccessを使って海外からのアクセスを制限する方法は、[[IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI's>http://www.cgis.biz/tools/access/]]で紹介されています。 //これより下は編集しないでください #pageinfo([[:Category/インターネット]],2007-05-14 (月) 01:31:04,DOBON!,2009-02-08 (日) 16:57:00,DOBON!)
タイムスタンプを変更しない
*.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 (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ドメインです。"; } }} **.htaccessで制限する [#lfeda95c] .htaccessを使って海外からのアクセスを制限する方法は、[[IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI's>http://www.cgis.biz/tools/access/]]で紹介されています。 //これより下は編集しないでください #pageinfo([[:Category/インターネット]],2007-05-14 (月) 01:31:04,DOBON!,2009-02-08 (日) 16:57:00,DOBON!)
テキスト整形のルールを表示する
▲
▼
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
複製
|
名前変更
|
リロード
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]