ダウンロード sample.zip (14.7 KB)
キャリアIPのチェック
携帯のかんたんログインではパソコンなどでヘッダを偽装してログインページにアクセスされると、認証を通してしまうことがありますので、アクセス元のIPアドレスを取得して携帯キャリアのものか判断する必要があります。
携帯キャリアのIPアドレスの帯域は各キャリアのページで公開されていますので、IP アドレスとネットマスクに関する処理を行うライブラリNet_IPv4を利用してアクセス元のIPアドレスがキャリアのものかチェックするメソッドを作成します。
Net_IPv4の主なメソッドは以下の通りです。
| メソッド名 | 意味 |
| ipInNetwork( string $piaddress, string $network ) | IPアドレスが指定されたネットワーク内にあるか判定する |
| validateIP( string $piaddress ) | IPアドレスの書式を検証する |
| validateNetmask ( string $netmask ) | ネットマスクの書式を返称する |
| parseAddress ( string $address ) | アドレス/ネットマスクの組み合わせ(CIDR アドレス)をパースする |
各キャリアのIPアドレスの帯域は以下のURLで公開されています。
アクセス元のIPアドレスは環境変数「$_SERVER['REMOTE_ADDR']」で取得できます。
携帯キャリアごとのIPアドレス帯域をconfig.php内に設定しておき、Net_IPv4::ipInNetworkメソッドでチェックします。
$docomo_ip = array(
'210.153.84.0/24',
'210.136.161.0/24',
# 略
);
/**
* コンストラクタ
*/
function Util(){
// 設定ファイル読み込み
include('config.php');
// ドコモのIPアドレス帯域
$this->docomo_ip = $docomo_ip;
# 略
}
/**
* ドコモのIPアドレスかを判定
*
* @return true / false
*/
function isDocomo()
{
foreach($this->docomo_ip as $k=>$v){
if(Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $v)){
return true;
}
}
return false;
}
同様にソフトバンクモバイル、auのIPアドレスかチェックするメソッドを作成します。
かんたんログインのメソッドに上記で作成したメソッドを追加します。
/**
* かんたんログイン
*/
function easyLogin($uid){
$util = new Util();
// キャリアのIPかチェック
if(!$util->isDocomo() && !$util->isSoftbank() && !$util->isAu()) return false;
かんたんログインのメソッドが呼ばれた際にアクセス元のIPアドレスが携帯キャリアのものかチェックし、携帯キャリア以外のIPアドレスは認証しません。
キャリアのIPアドレス帯域は追加、変更されることもありますので、プログラム内でキャリアのIPアドレス帯域を利用する際には必ず各キャリアのサイトで確認してください。
サンプルでは携帯キャリアのIP帯域をチェックする処理を入れています。
ですが、携帯電話からの端末IDの送信、プログラムでの端末IDの取得は携帯ベンダの仕様にも依存するところがあり、完全に安全に利用できるとは言えないのが実情です。
携帯電話端末によっては端末の脆弱性を利用されて、ユーザーの意図しない動作が行われることがあることをキャリアも認めています。
- 作ろうiモード:iモードブラウザ(NTTドコモ)
- ブラウザのセキュリティ設定に関する重要なお知らせ(ソフトバンクモバイル)
このような動作を起こす場合もあることを理解した上で、安全対策とともに実装する等、十分に注意した上で利用して下さい。
- 修正履歴
-
- 2010/10/11 22:48 PHP内部文字コードと出力文字コードを分ける処理を追加
- 2010/10/07 17:01 パスワード保存時の処理を変更
- 2010/10/06 14:15 かんたんログイン利用時の注意点を追加
- 2010/10/03 22:44 MySQLへの接続の際の文字コード指定、簡単ログインの際に携帯キャリアのIPアドレスか判定する処理を追加
この記事は参考になりましたか?
- 目的に応じて適材適所で使うPHPライブラリ連載記事一覧
-
- PHPで作成する携帯会員サイトの基本
- PHPUnitでできる単体テスト
- PHPで行う動画変換(後編)
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
