各キャリアの画像保存・転送制限の設定方法をまとめてみました    

2008/6/30 月曜日 matsui Posted in PHP, 全キャリア対応 No Comments »

今回は各キャリア・各フォーマット毎に、転送制限画像の作り方をまとめてみました。

ケータイでは、待ち受け画像などで使うために、ダウンロードした画像を再配布させないための、保存制限や転送制限を行うことができます。
転送制限をかけた画像は、メールへの添付や、SDカードへの保存が行えなくなります。
保存制限をかけた場合は、保存すらできません。

Windows用のフリーウェアなどには、転送制限を行わせないための情報を埋め込むソフトがあったりするのですが、CMSの管理画面からのアップロードや、メール添付による画像アップロードなど、サーバ上で動的に画像を生成しなければならないケースも多いと思いますので、PHPを使ったサンプル(とは言ってもコマンドを叩いているだけですが)でまとめてみることにします。

 

まず、概要を表にまとめると次の通りです。

キャリア
転送禁止
[jpg]
転送禁止
[gif]
転送禁止
[png]
保存禁止
[共通]
ドコモ コメント追加 *1 コメント追加 *1 そもそも表示不可 保存禁止は不可能
au コメント追加 *1 コメント追加 *1 コメント追加 *2 imgタグに属性追加 *3
SoftBank ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *5

 

*1 : ドコモ、auのjpg, gifを転送禁止にする方法

画像のヘッダ部分にコメントを入れます。
ドコモであれば「copy="NO"'」、auであれば「kddi_copyright=on」を入れてあげればOKです。
両対応にする場合は、カンマで続けて書けば大丈夫ですが、auは先頭に文字列がある必要がありますので、こちらを先に書き、「kddi_copyright=on,copy="NO"」のようにします。

PHPから処理する場合は次の通りです。
※ImageMagickのコマンド「mogrify」がインストールされている必要があります。

$cmd = "mogrify -comment 'kddi_copyright=on,copy=\"NO\"' test.jpg";
$res = system($cmd);

 

*2 : auのPNG画像を転送禁止にする方法

auのPNGを転送禁止にするには、画像のCopyrightキーワードの部分に「kddi_copyright=on」を埋め込んでやればOKとのことです。

ImageMagickを使った方法が良くわからなかったため、次のソフトを使いました。
(※方法をご存じの方教えてください)

こちらの記事の下段の方に「imgcmt」というソフトが公開されています。
→ MODULE.JP imgcmt version 1.0.0 [module.jp]

次のようにコマンドを実行することで、うまくいきました。
PHPのsystem関数でも同様で行けると思います。

imgcmtpng Copyright kddi_copyright=on < test.png > test.png

 

*3 : auで画像を保存禁止にする方法

こちらは簡単です。imgタグにcopyright=yesという属性を付けてやればOKです。

<img src="test.png" copyright="yes" />

 

*4 : ソフトバンクで画像の転送を禁止する方法

.htaccessに次のように記載します。
(Apacheの「mod_headers」モジュールがインストールされている必要があります)

<FilesMatch "\.(jpg|gif|png)$">
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

もうあまりアクセスは無いとは思いますが、J-Phone時代のC型端末の場合は、上記設定では対応できません。
C型端末に対応する場合は、画像の拡張子を変更することで転送を防ぐことができます。(「jpg → jpz」、「png → pnz」)

 

*5 : ソフトバンクで画像の保存を禁止する方法

同じく.htaccessに次のように記載します。

<FilesMatch "\.(jpg|gif|png)$">
  Header set x-jphone-copyright no-store
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

※公式サイトのPDF資料に、一部の端末ではno-storeが利用できないとありましたので、念のため3つを併記しました。

 

今回はImageMagickのコマンドを、system関数から叩くという方法を取っています。
他にも「MagickWand For PHP」を使った方法もあり、その例はウノウラボさんのブログに情報がありましたので、こちらを参照すると良いと思います。

→ ウノウラボ 携帯キャリアで画像を転送させない方法 [unoh.net]

 

上記ブログにもありますが、せっかく対策を行ってもケータイ以外からアクセスされては意味がありません。
IPアドレスによる制限をかけ、PCやWillcom、イーモバイルなどからのアクセスも遮断しましょう。

なお、これらの情報はまだ勉強中の段階のため、誤り等がありましたら、突っ込みをお願いいたします。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

ケータイからのみアクセスを許可する.htaccess    

2007/10/27 土曜日 matsui Posted in サーバ, 全キャリア対応 No Comments »

携帯電話からのアクセスのみを許可し、PCからは見えないようにしたい
というようなケースがよくあります。

今回は、そんな設定を実現する.htaccessを紹介します。

 

まずは、簡易バージョンのサンプルです。

Order Deny,Allow
Deny from all

# DoCoMo
Allow from .docomo.ne.jp

# au
Allow from .ezweb.ne.jp

# SoftBank
Allow from .jp-d.ne.jp .jp-h.ne.jp .jp-t.ne.jp .jp-c.ne.jp
.jp-k.ne.jp .jp-r.ne.jp .jp-n.ne.jp .jp-s.ne.jp .jp-q.ne.jp
.vodafone.ne.jp .softbank.ne.jp      # [実際には1行で記述]

この方法はメンテが楽な反面、次のような問題があります。

  1. アクセスの度に、IPアドレスの逆引き処理が走るため、処理に時間がかかる
  2. 逆引きに失敗する可能性がある

しかしながら、公式サイトのIPアドレス変更通知を定期的にチェックしなくてよいなど、
メンテナンスが楽なため、負荷が少なく、個人サイトの場合はこちらがオススメです。
なお、サーバのHostnamelookupsの設定値に関わらず、逆引き処理は行われるようです。

 

もう一つの方法は、キャリアのIPアドレスを指定し、アクセスを許可する方法です。

Order Deny,Allow
Deny from all

# 2007/10/25

# DoCoMo
Allow from 210.153.84.0/24 210.136.161.0/24 210.153.86.0/24

# au
Allow from 210.169.40.0/24 210.196.3.192/26 210.196.5.192/26
210.230.128.0/24 210.230.141.192/26 210.234.105.32/29
210.234.108.64/26 210.251.1.192/26 210.251.2.0/27 211.5.1.0/24
211.5.2.128/25 211.5.7.0/24 218.222.1.0/24 61.117.0.0/24
61.117.1.0/24 61.117.2.0/26 61.202.3.0/24 219.108.158.0/26
219.125.148.0/24 222.5.63.0/24 222.7.56.0/24 222.5.62.128/25
222.7.57.0/24 59.135.38.128/25 219.108.157.0/25 219.125.151.128/25
219.125.145.0/25 121.111.231.0/25      # [実際には1行で記述]

# SoftBank
Allow from 123.108.236.0/24 123.108.237.0/27 202.179.204.0/24
202.253.96.224/27 210.146.7.192/26 210.146.60.192/26
210.151.9.128/26 210.169.130.112/28 210.175.1.128/25
210.228.189.0/24 211.8.159.128/25     # [実際には1行で記述]

※2007年10月25日現在の情報を元に作成しています

記載するIPアドレスは、各社公式サイトで公開されている情報を使用します。

上記の情報は、希に更新されますので、定期的なチェックが必要になります。
(本サイト上でも変更が確認でき次第、その都度ニュースとしてお知らせいたします)

このエントリーを含むはてなブックマーク はてなブックマークに追加

ケータイキャリア毎に振り分けを行うには(mod_rewrite編)    

2007/10/26 金曜日 matsui Posted in サーバ, 全キャリア対応 2 Comments »

先日執筆した「PHPでキャリア毎に振り分けを行うには(ユーザエージェント編)」に続き、
mod_rewriteを使った、携帯電話・PCの振り分け方法をご紹介しようと思います。

前回の方法ですと、PHPが動くサーバでなくてはなりませんでしたが、
今回の方法ですと、「.htaccess」が置けて、「mod_rewrite」さえ動けばよいので、
より多くのサーバで、より簡単に動作させることができると思われます。

設置方法は簡単で、振り分けを行いたいディレクトリの直下に、
「.htaccess」ファイルを置くだけです。

今回の例でも

「http://example.jp/」 にアクセスがあった場合、

  • ドコモは 「http://example.jp/i/」 にジャンプ
  • auは 「http://example.jp/au/」 にジャンプ
  • SoftBankは 「http://example.jp/sb/」 にジャンプ
  • それ以外は通常通り「http://example.jp/」を表示

と設定する場合のサンプルを記載します。

・example.jpのWeb公開領域直下に、「.htaccess」という名前で、下記の内容のファイルを設置

<IfModule mod_rewrite.c>
RewriteEngine On

# SoftBank
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Vodafone [OR]
RewriteCond %{HTTP_USER_AGENT} ^MOT- [OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank
RewriteRule ^$ /sb/ [R=302,L]

# DoCoMo
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo
RewriteRule ^$ /i/ [R=302,L]

# au(HDML-Only)
RewriteCond %{HTTP_USER_AGENT} ^UP.Browser
RewriteRule ^$ /au/ [R=302,L]

# au(HTML-OK)
RewriteCond %{HTTP_USER_AGENT} ^KDDI
RewriteRule ^$ /au/ [R=302,L]

</IfModule>

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

PHPでキャリア毎に振り分けを行うには(ユーザエージェント編)    

2007/10/22 月曜日 matsui Posted in PHP, 全キャリア対応 No Comments »

記念すべきリニューアル後一つめの記事は、原点に帰って、
「ユーザエージェントによるキャリアの振り分け」
について書こうと思います。

「http://example.jp/」 にアクセスがあった場合、

  • ドコモは 「http://example.jp/i/」 にジャンプ
  • auは 「http://example.jp/au/」 にジャンプ
  • SoftBankは 「http://example.jp/sb/」 にジャンプ
  • それ以外は通常通り「http://example.jp/」を表示

というようなケースはとてもよくあります。

PC版とモバイル版に分けるためというのはもちろんですが、各キャリア用のHTMLや画像を、それぞれのフォルダに用意すればよいので、各キャリアに最適化したサイトの制作が容易になるからです。

下記はそんな振り分けプログラムのサンプルです。

// ユーザエージェントの取得
$agent = $_SERVER['HTTP_USER_AGENT'];

if (preg_match('/^J-PHONE/', $agent) or
    preg_match('/^Vodafone/', $agent) or
    preg_match('/^SoftBank/', $agent) or
    preg_match('/^MOT-/', $agent)) {
    // J-PHONE, Vodafone, SoftBankの場合
    $career_dir = ’sb/';
} elseif (preg_match('/^DoCoMo/', $agent)) {
    // DoCoMoの場合
    $career_dir = 'i/';
} elseif (preg_match('/UP.Browser/', $agent)) {
    // auの場合
    if(preg_match('/^KDDI/', $agent)) {
        // au(HTML-OK)
        $career_dir = 'au/';
    } else {
        // au(HDML-Only)
        $career_dir = 'au/';
    }
} else {
    // その他PC等
    $career_dir = ”;
}

$url = 'http://example.jp/' . $career_dir;
header('Location: ' . $url);        // 指定ページに移動
exit;

ポイントはauよりも先にソフトバンクを判定することです。
auだけではなく、ソフトバンク端末の中にも「UP.Browser」が搭載されている端末があります。

またソフトバンクの端末の中には「MOT-」から始まる特殊な端末があることにも注意してください。
もっともこの端末のシェアはかなり低いと思われますので、アクセスがあることは少ないでしょう。

今回はPHPのコードをサンプルとして記載しますが、他の言語でも基本は同じです。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加