携帯電話からのアクセスを弾く二つの方法(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"; }
と書き加える。
これによるSoftBankとJ-PHONEの携帯からのアクセスを無視する。
exitじゃ駄目exit()じゃないとmod_perlでの実行時におかしくなっちゃう。
.htaccessを使う・その1(mod_rewrite必須版)
.htaccessを使いユーザーエージェントを見て弾く。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(\J-PHONE|Vodafone|SoftBank)
RewriteRule ^$ /mobile/ [R]
.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帯域は信用できねーぞ( ゚д゚)ゴラァ!と言っているのだ。
ちなみにこういう携帯キャリアの問題はかの有名な高木浩光さんも話題にしている。
高木浩光@自宅の日記
閑話休題。
というわけで色々な方法で携帯キャリアは弾ける。
ちなみに僕はユーザーエージェントで弾くのを勧めます。一番手軽ですしね、ただユーザーエージェント偽装をされたらあぼんですけど。
まあ携帯じゃ偽装されることも滅多にはないので大丈夫かと。