Jadファイル、Jarファイルには画像ファイル等も入っており、PC等からのダウンロードが出来ないようにしたい場合もあります。いくつか方式を検討してみます。
OAPの場合、Jad/JarファイルのダウンロードはBREWアプリから行われますので、ドメイン「brew.net」からのダウンロードとなります。図で表すと以下の様になります。
一番簡単なのが.htaccessを利用してezweb.ne.jp、brew.ne.jp以外からのアクセスを制限してしまうことです。
ezweb.ne.jpのIPアドレス帯域はKDDIのezfactoryに詳細が記載されています。しかしながらbrew.ne.jpのIPアドレス帯域は一般には公開されていません。(なんとなくこんなところで確認できたりしますが)しかもIPアドレス帯域はたまに変更されてしまうのであまりあてには出来ません。
従って.htaccessには以下の様な記載を行います。
order deny,allow deny from all allow from ezweb.ne.jp allow from brew.ne.jp
ここで問題がひとつあります。.htaccess自体は上記の記載を許可しますが、サーバ側でドメイン名を記載する事を許可していない場合が殆どのようで、殆ど上記の記載方法は上手く行きません。(私が試したサーバは全てだめでした)
つまり.htaccessを利用したJar/Jadファイルの保護は現状あまり汎用的では無いと思われます。
.htaccessではドメイン名の解決が上手く動作しませんが、サーバでPHPが使える場合に限りますが、以下の様な方法で試した所上手く行く場合があります。(私が試したサーバは全て上手く動作しました)
1.Jad/Jarファイルを一般のブラウザからアクセスできない場所に配置します。
2.ファイルを読み込んでOAPに返却するPHPを記載します。
図にすると以下の様になります。
PHPがゲートウェイをするようなイメージです。以下に手順を記します。
1.まずJadファイルをダウンロードするPHPを用意します。以下の様なスクリプトで良いと思います。
・jad_download.php
<?php $jadfile = './bin/example.jad'; // './bin'は保護されたディレクトリ $jadfilesize = @filesize($jadfile); // ユーザーエージェントはKDDI-JVMを含む必要がある $userAgent = $_SERVER['HTTP_USER_AGENT']; if( is_null( $userAgent ) ) { $userAgent = 'x-unknown'; } if( FALSE == @strstr( $userAgent, "KDDI-JVM" ) ) { exit( "オープンアプリ対応端末からダウンロードしてください。</body></html>" ); } // brew.ne.jpからのアクセスだけを許可する $hostname = @gethostbyaddr($_SERVER['REMOTE_ADDR']); if( FALSE == @strstr( $hostname, ".brew.ne.jp" ) ) { exit( "オープンアプリ対応端末からダウンロードしてください。</body></html>" ); } header('Content-type: text/vnd.sun.j2me.app-descriptor'); header("Content-Length: $jadfilesize"); @readfile( $jadfile ); ?>
2.次にJarファイルをダウンロードするPHPを用意します。同じく以下の様なスクリプトで良いと思います。
※前述のjad_downlaod.phpファイルとほとんど変わりません
・jar_download.php
<?php $jarfile = './bin/example.jar'; // './bin'は保護されたディレクトリ $jarfilesize = @filesize($jarfile); // ユーザーエージェントはKDDI-JVMを含む必要がある $userAgent = $_SERVER['HTTP_USER_AGENT']; if( is_null( $userAgent ) ) { $userAgent = 'x-unknown'; } if( FALSE == @strstr( $userAgent, "KDDI-JVM" ) ) { exit( "オープンアプリ対応端末からダウンロードしてください。</body></html>" ); } // brew.ne.jpからのアクセスだけを許可する $hostname = @gethostbyaddr($_SERVER['REMOTE_ADDR']); if( FALSE == @strstr( $hostname, ".brew.ne.jp" ) ) { exit( "オープンアプリ対応端末からダウンロードしてください。</body></html>" ); } // ファイルを読み出して返却 header('Content-type: application/Java-archive'); header("Content-Length: $jarfilesize"); @readfile( $jarfile ); ?>
3.次にJadファイルのダウンロードURLを変更します。
・example.jad
MIDlet-1: example, example.png, applet MIDlet-Icon: icon.png MIDlet-Info-URL: http://example.com/ MIDlet-Jar-Size: 61084 MIDlet-Jar-URL: jar_download.php MIDlet-Name: example MIDlet-Vendor: sv MIDlet-Version: 1.0.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0
こうする事によってOAPは同一ディレクトリに存在するjar_download.phpを参照するようになります。
4..htaccessを用意します。
・.htaccess
# 全てのWeb経由でのアクセスを拒否する order deny,allow deny from all
これで準備完了です。これらのファイルを以下の様に配置します。(配置場所は実際のものと適宜読み替えてください)
これによって、JadファイルとJarファイルはIP詐称でもされない限り誰からも読み取られる事はなくなります。