ガジェカツ~在宅SEのガジェット活動ブログ~

在宅SEな筆者がガジェットネタやIT、プログラミングネタを書き連ねるブログ

携帯電話からのアクセスを弾く二つの方法(in iMonaServer)

ということで2ch本スレが面白いことになっている面白い話題が出ているのでちょっくら調べて書いてみました。
(うん、面白い事にはなってないね”話題”にはなってるけどorz)

iMonaServerスクリプト上で弾く。

2.cgi内の、

	if($ENV{'HTTP_USER_AGENT'} =~ m/SoftBank/i){	# SoftBank
		print "Content-type: application/Java\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m|UNTRUSTED/\d\.\d|i || $ENV{'HTTP_USER_AGENT'} =~ m|Vodafone/.+? Java/|){	#Vodafone 3G
		print "Content-type: application/java\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/PHONE\/[4-9]\./i || $ENV{'HTTP_USER_AGENT'} eq ''){#jphone P4 P5 W
		print "Content-type: application/Java\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/PHONE\/3\./i){	# jphone C4
		print "Content-type: text/vnd.sun.j2me.app-descriptor\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/DoCoMo/i){		# DoCoMo
		print "Content-type: text/plain\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/KDDI/i){		# au
		print "Content-type: application/octet-stream\n";
	} else {
		print "Content-type: text/plain\n";
	}

	if($ENV{'HTTP_USER_AGENT'} =~ m/SoftBank/i){	# SoftBank
		exit();
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m|UNTRUSTED/\d\.\d|i || $ENV{'HTTP_USER_AGENT'} =~ m|Vodafone/.+? Java/|){	#Vodafone 3G
		exit();
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/PHONE\/[4-9]\./i || $ENV{'HTTP_USER_AGENT'} eq ''){#jphone P4 P5 W
		exit();
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/PHONE\/3\./i){	# jphone C4
		exit();
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/DoCoMo/i){		# DoCoMo
		print "Content-type: text/plain\n";
	} elsif($ENV{'HTTP_USER_AGENT'} =~ m/KDDI/i){		# au
		print "Content-type: application/octet-stream\n";
	} else {
		print "Content-type: text/plain\n";
	}

と書き加える。
これによるSoftBankJ-PHONEの携帯からのアクセスを無視する。
exitじゃ駄目exit()じゃないとmod_perlでの実行時におかしくなっちゃう。

.htaccessを使う・その1(mod_rewrite必須版)

.htaccessを使いユーザーエージェントを見て弾く。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(\J-PHONE|Vodafone|SoftBank)
RewriteRule ^$ /mobile/ [R]

これでSoftBank(旧J-PHONE,Vodafone)を弾ける。

.htaccessを使う・その2

SoftBankの開発者用サイトにあるIPの帯域を全て弾く。
https://creation.mb.softbank.jp/web/web_ip.html

order allow,deny
allow from all
# SoftbankIP帯域(2009/08/21時点)
deny from 123.108.236.0/24
deny from 123.108.237.0/27
deny from 202.179.204.0/24
deny from 202.253.96.224/27
deny from 210.146.7.192/26
deny from 210.146.60.192/26
deny from 210.151.9.128/26
deny from 210.175.1.128/25
deny from 211.8.159.128/25

この方法が一番いいのだが問題が一つある。
先ほどのページに書いてあるIP帯域なのだが、ページ下部に、

本情報はあくまでも目安としてご参照ください。 本IPアドレス帯域以外からソフトバンク携帯電話のアクセスがない事を保証するものではありません。

と書いてある。つまりは公式自らがこのIP帯域は信用できねーぞ( ゚д゚)ゴラァ!と言っているのだ。
ちなみにこういう携帯キャリアの問題はかの有名な高木浩光さんも話題にしている。
高木浩光@自宅の日記
閑話休題
というわけで色々な方法で携帯キャリアは弾ける。
ちなみに僕はユーザーエージェントで弾くのを勧めます。一番手軽ですしね、ただユーザーエージェント偽装をされたらあぼんですけど。
まあ携帯じゃ偽装されることも滅多にはないので大丈夫かと。