ラベル url の投稿を表示しています。 すべての投稿を表示
ラベル url の投稿を表示しています。 すべての投稿を表示

2015年2月25日水曜日

Content Security Policy

ApacheでContent Security Policyを設定したメモ。


httpd.confで設定する例。

Header set Content-Security-Policy "default-src 'self'; script-src 'self', 'unsafe-inline', www.example.com"


とりあえずレポートだけ見たい場合の例。
Header set Content-Security-Policy-Report-Only \
"default-src 'none';\
 script-src 'self';\
 object-src 'none';\
 img-src 'self';\
 media-src 'none';\
 frame-src 'none';\
 font-src 'none';\
 connect-src 'none';\
 style-src 'self';\
 report-uri /csp-report.php?v=1"

レポートでどのポリシーに違反したのか見やすくするため、xxxx-srcを全部書いた。
何がエラーになるか分かるように基本厳し目に、使わなそうなのはとりあえずnoneにしている。
report-uriのパラメータ(v=1)は後述。

右辺の書き方については下記参照。
CSP policy directives - Security | MDN

はまりそうなとこだけ書くと、

  • 'none'・'self'・'unsafe-inline'・'unsafe-eval'はシングルクォーテーションも含めて書く必要がある。
  • データスキーム(data:)はコロンも含めて書く。
    (mod_pagespeedを使っていると、気づかない間にデータスキームが使われていたりする。)
    ちなみに、スキームはデータに限らず、"https:"など特定のスキーム限定を指定できるみたい。
  • URLはスキームを省略可(例:www.example.com)。省略した場合、元のページと同じスキームと同じもののみ許可する。
    ポートも同様。
  • URLで別のスキームを許可したい場合、別途記載が必要。
    例:元のページがhttpで、読み込むCSSがhttpsの場合、httpsのURLも書く必要がある。
    ワイルドカードが使えるという説明もあったが、下記のどちらも駄目だった(ブラウザによる?)
  • *://www.example.com
  • *//www.example.com
  • URLのサブドメインはワイルドカード(*)が使える。
    サブドメインをワイルドカードにすると、サブサブ(...略)ドメインまでワイルドに適用される。
    ただしサブドメイン無しには適用されないらしい。


レポートをログに書き出すPHPの例。
<?php
if (!$_GET || $_GET['v'] < 1) {
        exit;
}
$report = json_decode(file_get_contents('php://input'), true);
$log = date('[Y-m-d H:i:s] ') . $_SERVER['HTTP_USER_AGENT'] . ' ';
$log .= var_export($report['csp-report'], true) . "\n";
error_log($log, 3, '/var/log/csp-report.log');

Content-Security-Policy-Report-Onlyの例でreport-uriにパラメータを付けたのは、このPHPの2行目で古いポリシーを無視するため。
ブラウザによってはキャッシュしてしまうようで、古いポリシーに基づき送信してくることがあり、ノイズになるので。
ポリシーを変えたら、パラメータの数字とPHPの2行目の数字を両方インクリメントする。

ログファイルはApacheが書き込めるように権限設定しておく。

(2015/3/2 追記)
logrotateも追加しておく。(phpのlogrotate設定をコピーして作成。)
/var/log/csp-report.log { missingok notifempty}

(追記終わり)

また、ModSecurityを使っている場合はレポートがModSecurityではじかれないように注意。

ログを見ていると、違反URLとして報告される"about"はabout:blankだと思うけど、"asset"って何だろう?



ちなみに、Gmailのポリシーはこんな感じだった。
script-src https://*.talkgadget.google.com 'self' 'unsafe-inline' 'unsafe-eval' https://talkgadget.google.com https://www.googleapis.com https://www-gm-opensocial.googleusercontent.com https://docs.google.com https://www.google.com https://s.ytimg.com https://www.youtube.com https://ssl.google-analytics.com https://apis.google.com https://clients1.google.com https://ssl.gstatic.com https://www.gstatic.com blob:;frame-src https://*.talkgadget.google.com https://www.gstatic.com 'self' https://accounts.google.com https://apis.google.com https://clients6.google.com https://content.googleapis.com https://mail-attachment.googleusercontent.com https://www.google.com https://docs.google.com https://drive.google.com https://*.googleusercontent.com https://feedback.googleusercontent.com https://talkgadget.google.com https://isolated.mail.google.com https://www-gm-opensocial.googleusercontent.com https://plus.google.com https://wallet.google.com https://www.youtube.com https://clients5.google.com https://ci3.googleusercontent.com;object-src https://mail-attachment.googleusercontent.com;report-uri /mail/cspreport

見やすく整形。
script-src
https://*.talkgadget.google.com
'self'
'unsafe-inline'
'unsafe-eval'
https://talkgadget.google.com
https://www.googleapis.com
https://www-gm-opensocial.googleusercontent.com
https://docs.google.com
https://www.google.com
https://s.ytimg.com
https://www.youtube.com
https://ssl.google-analytics.com
https://apis.google.com
https://clients1.google.com
https://ssl.gstatic.com
https://www.gstatic.com
blob:
frame-src
https://*.talkgadget.google.com
https://www.gstatic.com
'self'
https://accounts.google.com
https://apis.google.com
https://clients6.google.com
https://content.googleapis.com
https://mail-attachment.googleusercontent.com
https://www.google.com
https://docs.google.com
https://drive.google.com
https://*.googleusercontent.com
https://feedback.googleusercontent.com
https://talkgadget.google.com
https://isolated.mail.google.com
https://www-gm-opensocial.googleusercontent.com
https://plus.google.com
https://wallet.google.com
https://www.youtube.com
https://clients5.google.com
https://ci3.googleusercontent.com
object-src
https://mail-attachment.googleusercontent.com
report-uri
/mail/cspreport

scriptは'unsafe-inline'も'unsafe-eval'も許可してしまっているが、imgも含めて*を使っていないのは立派。
style等は(defaultも)指定していないが、不要という判断か、指定すると差し障りがあるのか、どちらだろう?

また、1バイトを削るのにもこだわるGoogleがわざわざこれだけの文字列を送信するのは、セキュリティの方が重要だからということだろう。
サブドメインをワイルドカードでまとめれば随分減りそうだが、Googleともなると使っているサブドメインも膨大なので、セキュリティが担保しづらくなるのだろう。
policy-uriを指定してポリシーをXMLでやりとりしてキャッシュを効かせれば総通信料は減りそうだが、柔軟性とのトレードオフか。
report-uriも送信料を増やすが、これ無しは運用的にきっと難しいだろう。

2014年9月27日土曜日

Androidアプリ「SupportText」

自分が実際に使っているマイナーな良Androidアプリを誰にともなく紹介するシリーズ、3分タイマーに続く第2段は、日本Android界の情報網に残されたラスト・ワン・マイルを繋ぐ、SupportText有料 / 無料)。

コピーしてクリップボードにあるテキストや、インテント(「共有」とか)のハブとして機能し、他のアプリに渡すことができる。(何と説明しづらい…)

ただ、自分がやりたかったのは、ただ、Feedlyから はてなブックマークのコメントを見たかっただけなので、クリップボードその他の豊富な機能は使っていないし、Pro(有料版)も試してない。
Feedlyは「共有」でURLを送ろうとするとutm_sourceを付けて独自URLにしてしまうため、はてなブックマークアプリにうまく情報を渡せないという問題があり、これについてはこれまで対応しているアプリを探しても見つからず諦めかけていて、もう自分で作ろうか、でもそこまで必要でもないしと思っていたところで見つかったので非常に嬉しい。

ちなみにutm_sourceについては海外のFeedlyユーザーも不満を持っているコメントを見たことがあるのでFeeldy側も知らないわけではないだろうが、未だに対応していない所を見ると対応しない方針なのだろう。
それより、はてなブックマークアプリ側で対応する方が可能性がありそうだが、そんな需要はないのだろうか。(iOSアプリではSafariのApp Extensionとしてブックマークできるようにはしたがなぜかコメントを見ることができないという結果を見ると、ましてやAndroidアプリのごく一部のケースの対応は望めないのだろうか。リクエストしてみればいいんだろうけど。)

SupportTextを使うとなぜutm_sourceを回避できるかというと、SupportTextでURLを変更できるわけではなくて、Feedlyが「ブラウザ」にURLを渡す場合にはutm_sourceを付けないから。SupportTextは「ブラウザ」として振る舞うことができるので、FeedlyからURLを受けることができるという仕組み。ただし副作用として(「ブラウザ」としてSupportTextを登録してしまうと)ホーム画面のWebページのショートカットをタップした時もSupportTextが起動してしまう。本当はSupportTextからの呼び出しは はてなブックマーク(それにしても平仮名から始まる名詞は書きにくい/読みにくいので駄目ですね)だけにしたいのだが、合わせて普通のブラウザも選べるようにしなければならない。まあこれはSupportTextの問題ではなく、特定のアプリからの呼び出し時のみ起動するアプリを指定できないAndroidのインテントの限界か。(iOSに比べれば数年マシだが!)

前置きが長くなったが、長所と短所を。

長所
  • インテントのハブとして機能する。
  • 細かい設定ができる。インテントの呼び出され方や他のアプリの呼び出しについてだけでなく、表示上のボタン・テキストの大きさや表示/非表示まで細く設定できる。
短所
  • 設定が細かい。設定おじさんでないと辛いくらい細かい。言ってみれば、SupportTextがYahoo!Pipesだとしたら、それに対するIFTTTのようなアプリがあれば人気が出るのではないだろうか。(需要がないか。)

ダウンロードはこちらから


過去のAndroidアプリ紹介

2014年8月17日日曜日

楽天とAmazonの任意のページについて アフィリエイト用URLを作る方法

楽天

  1. 自分の楽天アフィリエイトのアカウントについての下記のようなURLをどこか(楽天APIとか)から入手する。
    http://hb.afl.rakuten.co.jp/hgc/<この部分はアカウントごとに違う>/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Frb%2Fxxxxxxxxxx%2F
  2. 上記URLの、"http"以降を表示したいページのURLをURLエンコードしたものに差し替える。

Amazon
  • 表示したいページのURLに"?tag=<自分のアカウントのタグ>"を追加する。
    ただし、ページのURLのにクエリーパラメータがある(URLに"?"を含む)場合は"?tag"の"?"を"&"に変える。
  • Amazon公式のリンクの動作確認ツールがあるので、これで確認するとよい。(タグ追加直後はうまく動作しない?)

動作確認はこれから。

2011年4月11日月曜日

PHPのエラーメッセージのマニュアルへのリンクを変更する

PHPのfunctionでエラーが発生すると、エラーメッセージが該当するfunctionへのリンクになる場合がある。

array_merge('foo');

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /var/www/html/test.php on line 2

このリンクのリンク先は、デフォルトでは有効なURLではない。

php.ini等でマニュアルの場所を指定してあげると、マニュアルの該当functionへのリンクにすることができる。
ini_set('docref_root', 'http://jp.php.net/manual/ja/');
array_merge('foo');

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /var/www/html/test.php on line 3

このエラーメッセージをブラウザで見る場合は便利な場合もあるかもしれないが、このエラーメッセージはそのままエラーログにも出力されるので、エラーログが余計に増えてしまう。
(エラーログ上のマニュアルのURLを使うなら便利かもしれないが。)
このリンクを抑制するにはhtml_errorsをOffにする。
ini_set('html_errors', false);
array_merge('foo');

Warning: array_merge(): Argument #1 is not an array in /var/www/html/test.php on line 3

すっきりしたね。


参考:PHP: 実行時設定 - Manual

2011年3月24日木曜日

PHPで URLのホスト名(ドメイン)が存在するかチェックする方法

PHPでURLのホスト名(ドメイン)が有効なものかどうかをチェックする例。
file_get_contents()でignore_errorsをtrueにしてstream_context_create()してもホスト名が名前解決できなくてWarningが出てしまう問題に悩んでいる場合などにどうぞ。

$url = 'http://www.example.com/path';

$array = parse_url($url);

if ($array && $array['host']) {
    $ip = getHostByName($array['host']);
    $long = ip2long($ip);
  
    if ($long === false || $ip !== long2ip($long)) {
        echo '名前解決できなかった';
    } else {
        echo 'OK';
    }
} else {
    echo 'URLが正しくない';
}

DNSで名前解決できたらOKにしている。
また、ホスト名がIPアドレス(IPv4)の場合はどんなIPでも(たとえ255.255.255.255でも)OKにしている。

ip2long()で得た値をlong2ip()でIPアドレスに戻してチェックしているのは、ip2long()が「0.0.256」のような値を「0.0.1.0」などと解釈してしまうため。
参考:(IPv4) インターネットプロトコルドット表記のアドレスを、適当なアドレスを有する文字列に変換する - PHP 5.3 日本語マニュアル
ip2long() を、それ単体で IP の検証に利用するべきではありません。long2ip() と組み合わせて利用します。

<?php
// IP が有効であることを確認します。また、不完全な形式の IP を
// 以下で示すような正しい形式(ドットで 4 つに区切られている)に変換します。
$ip = long2ip(ip2long("127.0.0.1")); // "127.0.0.1"
$ip = long2ip(ip2long("10.0.0")); // "10.0.0.0"
$ip = long2ip(ip2long("10.0.256")); // "10.0.1.0"
?>


これはIPv4を使ってるけど、今後IPv6が普及したら...その時までにPHPも進化しているでしょう。


参考

2011年1月18日火曜日

jQuery UI Tabsでタブのリンクを静的リンクにする方法

jQuery UI Tabsでタブのリンクに普通のURLを書くと、ページ遷移なしでそのURLのHTMLを読み込んでタブ内のコンテンツとして表示してくれる。スムーズでよいが、そのままでは静的なリンクにはできない。

また、タブのリンクのURLをハッシュ(「#」で始まる文字列で、要素のidを指定する)にすると、ページ内の該当要素のみをタブ内のコンテンツとして表示してくれるが、別のページへの遷移としては使えない。


なので、タブの見た目だけを使いたくて、リンクは普通に静的リンクにしたい場合はこんな感じにする。

page1.html

<div id="tabs">

<ul>
<li><a href="#tab-content">タブ1に表示するラベル</a></li>
<li><a href="page2.html">タブ2に表示するラベル</a></li>
</ul>

<div id="tab-content">
ページの内容
</div>

</div>

page2.html
<div id="tabs">

<ul>
<li><a href="page1.html">タブ1に表示するラベル</a></li>
<li><a href="#tab-content">タブ2に表示するラベル</a></li>
</ul>

<div id="tab-content">
ページの内容
</div>

</div>

JavaScript
$('#tabs').tabs({
    //Ajaxで読み込むのを阻止
    select: function(event, ui) {
        var url = $.data(ui.tab, "load.tabs");
        if (url) {
            location.href = url;
            return false;
        }
        return true;
    },
    //選択状態にするタブのindex
    selected: 0 // ← 1つ目のタブなら0、2つ目のタブなら1というように動的に変える
});

ポイント
  • tabs()のselectオプションでタブクリック時は普通にページ遷移するようにする
  • tabs()のselectedオプションで表示中のページのタブを選択状態にする
  • 表示中のページのタブのhref属性はURLではなくハッシュ(#xxxx)にすることにより、そのページのコンテンツを表示する


参考

2010年11月16日火曜日

大手サイトがやっている自サイト専用のURL短縮サービス

思いつくものをまとめてみた。
bit.lyによる独自ドメインURL短縮サービスで日本人にあまり馴染みのないもの(NY Timesとか)は除外した。

サイト
短縮URL
備考
Google Maps
FeedBurner
goo.gl
Google Mapsは goo.gl/maps/xxxx
FeedBurnerは goo.gl/fb/xxxx
その他のサイトの場合、 goo.gl/xxxx
YouTube
youtu.be
後ろに動画のIDを付けると、その動画の短縮URLになる。
例: http://youtu.be/4qCbiCxBd2M
Yahoo!
yhoo.it
powered by bit.ly
uk.yahoo.comやfr.yahoo.comは短縮してくれるが、
yahoo.co.jpは対象外。なぜかtw.yahoo.comも対象外。
Flickr
flic.kr

Delicious
icio.us
ドメインハックの先駆者がこんな形で再利用されるとは。
Bing
binged.it
短縮URLは既に機能しているが、
URL生成はまだプライベートBeta。
Amazon
(USのみ)
amzn.com
後ろにASINを付けると、その商品ページの短縮URLになる。
例: http://amzn.com/B002FQJT3Q
Kindleの場合、「amzn.com/k/xxx」のようだ。
アソシエイトはできるのかな?
Amazon
amzn.to
powered by bit.ly
こちらはamazon.co.jpも対象。
Facebook
fb.me

Twitter
t.co

foursquare
4sq.com

MySpace
mysp.ac
powered by bit.ly
Ustream
ustre.am

Dailymotion
dai.ly
powered by bit.ly
Scribd
scr.bi
powered by bit.ly
楽天
r10.to
どこで生成できるか分からなかった
mixi
mixi.at

ニコニコ動画
nico.ms

はてなブックマーク
htn.to
powered by bit.ly (2011/3/21 訂正)
PIXIV
p.tl

日経新聞
s.nikkei.com
powered by bit.ly


日経新聞のサブドメインを使うやり方は好感が持てる。
Bingはよく考えたら自サイト専用じゃないけどまあいいや。
ところでyhoo.itはYahoo! Italia(it.yahoo.com)と間違えそう。


(2011/3/21 追記)
htn.toは、はてなブックマークだけでなく、はてな全般で使われているみたい。(これを書いた後で変わった?)
また、bit.ly proを使ってるわけではないようだ。
(追記終わり)


参考:
Bit.ly、月間47億クリック。Pro版も好調、Yahoo、MySpaceらも採用
bit.ly | Basic | a simple URL shortener
JSTwi


2010年11月9日火曜日

あなたの知らないbit.lyの便利機能

URL短縮サービス最大手のbit.ly。Yahooなど大手サイトの短縮も請け負ってもはやURL短縮サービスの代名詞になりつつある。
そんなbit.lyだが、URL短縮以外のサービスもやっていることについては意外と知らないのではないだろうか?


1. 後ろにプラスでクリック数やTwitterでのつぶやきを表示


短縮URLの後ろに"+"(プラス)を付けると、その短縮URLのアクセス統計が見られるのは有名。

でもTwitterでのつぶやき(最大99件)等も見られるようになっているのは知らなかった。
Twitterのつぶやきには、bit.lyで短縮されたものだけでなく、goo.glやTinyURLで短縮されたリンクも含まれて表示されている。BackTweetsから引っ張ってきているようだ。
URLがトップレベル等の場合、その配下の短縮URLも含めたTweetが表示される。(BackTweetsを使うからそうなるんだろう。)
下記の例は「はてなブックマーク」のトップページの短縮URLの統計ページだが、はてなブックマークのトップページだけだなく、はてなブックマーク内の全ての短縮URLのTweetが表示対象となっている。
例: bit.ly statistics for (はてなブックマーク)

また、クリック数はj.mpと共有しているようだ。→ http://j.mp/DeWI+

ちなみに、amzn.toなどのbit.lyの専用短縮URLの場合、プラスを付けるとbit.lyのページにリダイレクトされて統計が見られる。
例: http://amzn.to/CB7N+



2. QRコード

goo.glでは短縮URLの後ろに".qr"を付けるとQRコードが表示されるが、bit.lyもいつの間にか(?)実装していた。
bit.lyの場合、短縮URLの後ろに".qrcode"を付けるとQRコードが表示される。
例: http://j.mp/DeWI.qrcode

goo.glのQRコードより大きい。(goo.glには負けないという意気込みを感じる?)

QRコードは(株)デンソーウェーブの登録商標です。



3. 人気の動画を一覧表示

統計から人気の動画を選び、一覧表示しているようだ。 → bitly.tv | What the world is watching now



4. a.ly

http://a.ly にアクセスするとbit.lyにリダイレクトされる。
しかし残念ながら(?)このa.lyは短縮URLには使えないようだ。

2010年10月27日水曜日

1文字のセカンドレベルドメイン

1文字のセカンドレベルドメインで、現在活用されているものを調べてみた。
(セール中のものはたくさんあったが除外した。)


TLDドメインURL短縮リダイレクト補足説明
cn6.cn
中国の動画共有サイト

g.cn
Google中国(谷歌)
coe.co

準備中?

t.co
by Twitter
comq.com
Quest

x.com

PayPal X

z.com

休止中
ly0.ly


1.ly
webciety

2.ly


3.ly


4.ly
2.lyと同じサイトと思われる

6.ly
2.lyと同じサイトと思われる

7.ly
2.lyと同じサイトと思われる

8.ly
2.lyと同じサイトと思われる

a.ly
bit.ly

c.ly


g.ly
grooze.com

o.ly


p.ly
re.p.lyのエイリアス

s.ly

準備中?

v.ly
2.lyと同じサイトと思われる

x.ly

準備中?

y.ly


z.ly

準備中
mpj.mp
bit.lyの別サービス
neti.net

休止中?

q.net

休止中
nuu.nu
サービス終了
orgx.org

X.Org
w.org
Wordpress.org
tlp.tl
by PIXIV
to5.to


vg1.vg




やはり短縮URLサービスが多い。
bit.lyはa.lyじゃなくて、re.p.lyみたいにt.lyを取得すればいいのに。

それにしてもlyの1文字っぷりがもはや清々しい。

他にもあれば情報ください!

(2010/11/05 u.nuを追加)
(2011/03/07 5.toを追加)
(2015/03/01 w.orgを追加)

2010年9月6日月曜日

Google Maps API (V2)を iPadで使う場合の注意点

各所でiPadには対応していないを書かれているGoogle Maps API V2だが、やってみたら使えた。
以前使ったときには確かに対応していなかったと思うが、最近対応したのだろうか?Change Logにも書かれていないが...。

ただしiPadでは動きが変わる点があったのでメモ。


注意点1
GMarkerに対してdisableDragging()すると、iPadではそのマーカーをクリックしてもclickイベントを感知できないようだ。

対策としてはdisableDragging()しないこと。ドラッグしたいなら、代わりにドラッグ用のGMarkerを表示して、ドラッグが終わったらドラッグ先の場所に元のマーカーを移動して表示する、とすればたいてい間に合うのではないだろうか。


注意点2
こちらはAPIとは関係ないが、Google Mapsで経路検索結果を表示する場合の行き方(乗り物)を指定するパラメータのうち、電車についてのパラメータの値がiPad/iPhoneの場合は特殊なので注意。
詳しくはこちら → GoogleMapの経路検索で、車、電車、徒歩を指定するURL - iRSSの日記

2010年6月23日水曜日

Google Appsのカレンダーを携帯で閲覧する方法

下記のようなURLにアクセスすると、携帯用のGoogleカレンダーを閲覧できる。

https://www.google.com/calendar/hosted/<Google Appsのドメイン>/m


このURLはPCからでも接続できる。
しかし携帯からアクセスすると、なぜかhttpになる。(httpsだとauでUTF-8が使えないから?)


ちなみに携帯で下記URLにアクセスすると、サーバ証明書が不正だといって接続を拒否された。
https://calendar.google.com/a/<Google Appsのドメイン>/m
このURLは昔使ってたみたいで、未だにGoogleの公式サイトを含めてこのURLが書いてあるところが多い。
PCでこのURLにアクセスすると、上のURLの方にリダイレクトされる。


また、携帯版のカレンダーでは見たい日付を指定できないので、遠い日付を見たい場合には「前」あるいは「次」リンクを連打する羽目になる。
Google Calendar Mobile Gatewayを使うしかないのか。

2010年6月7日月曜日

Googleドキュメントで他のユーザーを招待する場合のセキュリティ

Googleドキュメント(Google Docs)で他のユーザーを招待すると、招待用のURLが記載されたメールが送られる。
実はこのURLにアクセスすると、招待されたユーザー以外でもそのページにアクセスすることができる

この件については下記が詳しい。

高木浩光@自宅の日記 - Googleドキュメントの「招待メール」の危険

上記記事が書かれた時からの変更点として、現在は招待用URLからGoogleドキュメントにアクセスする前にGoogleアカウントでのログインが求められるため、Googleアカウントを持っていないユーザーはアクセスできなくなった。

しかし、招待用URLさえ分かれば、Googleアカウントを持っているユーザーなら誰でもアクセスできてしまうことに変わりはない。

(参考:そのドキュメントに誰も招待していなければ、招待用URL自体が作成されないので他のユーザーはアクセスできない。)



以上がデフォルト設定の場合の話。

Googleドキュメントではオプション設定により、アクセスできるユーザーを招待した人だけに限定することができる。

共有ボタンから「他の人と共有」ダイアログを表示させて、下記のように「権限オプション」タブを見ると、「招待状の転送を許可する」というチェックボックスがある。



デフォルトではチェックが付いているので、転送してもらった人でもアクセス可能、つまりURLさえ分かればアクセス可能になる。
このチェックを外して保存すれば、アクセスできるのは招待されたユーザーのみになる



この設定はなかなか分かりにくいので、Googleさんは「許可しない」をデフォルトにした方がいいと思う。あるいは、ユーザーごとの設定でデフォルトを決められるようにするか。

2010年5月18日火曜日

PHPで 画像をdataスキーム URI化して表示するサンプル

使いどころは思いつかないがメモしておく。

$path = 'path/to/target.gif';

$uri = 'data:' . mime_content_type($path) . ';base64,';
$uri .= base64_encode(file_get_contents($path));

echo '<img src="' . $uri . '" />';

参考:php :: gif画像をbase64エンコードしてimgタグで表示する :: ウェブデザイナーの日記

2010年4月16日金曜日

リダイレクトでの 絶対URL、 相対URL

以前、docomoで相対URLでのリダイレクトができなかった記憶がある。
また、社内のWindows関連のシングルサインオンか何かで、相対URLでは動かなかったことがあった。


以下はGoogleで調べたら出てきた参考ページ

2009年8月12日水曜日

Rubyの ActiveResource調査メモ





基本:

 ActiveResourceでいろんなAPIを叩いてみる。標的はHotpepper API - 富士山は世界遺産


発行されるURLと拡張子について:
 天使やカイザーと呼ばれて: ActiveResourceで拡張子なしのURIを発行する方法


応用編:
 ActiveResource の使い方(前編) : Rails 同士で通信する - WebOS Goodies
 ActiveResource の使い方(中編) : メソッドの詳細 - WebOS Goodies
 (後編は? 2009/09/17追記:公開された↓)
 ActiveResource の使い方(後編) : 一般の Web API にアクセスする - WebOS Goodies


ActiveResourceのバグ?
 [PATCH] ActiveResource find(:all) method returns "NoMethodError: undefined method `collect!'... - lambda {|diary| lambda { diary.succ! } }.call(hatena)
取得するXMLがn件のデータを包含する要素を持つ形の場合、包含する要素に属性type="array"が無いと「collect!メソッドが無いよ!」というエラーが発生する問題。

たとえばこれだとエラーになる。(n件のmemberを、membersという要素で包含している。)

<?xml version="1.0" encoding="UTF-8"?>
<menbers>
 <member>
  <id>1</id>
  <id>name</id>
 </member>

</menbers>

type="array"を付ければエラーにならない。
<?xml version="1.0" encoding="UTF-8"?>
<menbers type="array">
 <member>

  <id>1</id>
  <id>name</id>
 </member>

</menbers>


2009年2月11日水曜日

Flickr mobileの URL

PCで見る場合のFlickrのURL
 http://www.flickr.com/photos/maynard/3251629235/
 ↓
携帯で見る場合のFlickrのURL(User-Agentのチェックあり)
 http://m.flickr.com/photo.gne?id=3251629235&


ただし下記でも同じ写真のページを表示できる。(この場合もUser-Agentのチェックあり)
 http://m.flickr.com/photos/maynard/3251629235/
しかし、このURLの場合はページ内のユーザーのphotostreamページへのリンクがおかしくなってしまうので、m.flickr.comの方を使うほうが良さそう。

CakePHPで Cookieが有効になる PATHを指定する方法

CookieのPATHを指定すると、そのPATHに該当する場合のみCookieが有効になる。
SESSIONもCookieを使うので、SESSIONが有効になるPATHを限定または拡大できる。

例えばCookieのPATHが /foo の場合、
 Cookieが有効なURL
   http://example.com/foo
   http://example.com/foo/bar
 Cookieが無効なURL
   http://example.com/
   http://example.com/baz


CakePHPではCookieのPATHを指定したい場合、Sessionコンポーネントのpublic変数"path"にセットする。
AppControllerのbeforeFileterでやればアプリケーション全体に効く。

<?php
class AppController extends Controller {
 function beforeFilter() {
  $this->Session->path = '/foo';
 }
}

2008年11月14日金曜日

PHPで簡単にURLのGETパラメータを作成する方法

標準関数のhttp_build_query()を使うと、URLのGETパラメータ(クエリーストリング)を簡単に作れる。
PHP5かららしい。


$query = array('foo' => 'ABC', 'bar' => 123, 'baz' => 'あああ');
echo http_build_query($query);
結果
foo=ABC&bar=123&baz=%82%A0%82%A0%82%A0

URLエンコードもしてくれるのが便利。


HTMLエスケープもしたいなら、第3引数を'&amp;'にする。(パフォーマンスを気にしないなら、URLをまるごとhtmlSpecialChars()した方が楽だが。)


echo http_build_query(array('foo' => 'ABC', 'bar' => 123), '', '&amp;');
結果
foo=ABC&amp;bar=123


参考:PHP: http_build_query - Manual

2008年9月6日土曜日

楽天アフィリエイトのPC用 URLと 携帯用URLとの違い

楽天アフィリエイトのPC用URLと携帯用URLの関連性について。公式な資料が無いので推測を元に調査してみる。


楽天Webサービスでの説明を見ると、PC用と携帯用のアフィリエイトURLは別になっている。

http://hb.afl.rakuten.co.jp/hgc/[アフィリエイトID]/?pc=[商品URL(PC)]
もしくは、
http://hb.afl.rakuten.co.jp/hgc/[アフィリエイトID]/?m=[商品URL(モバイル)]
ちなみに、楽天Webサービスで商品URLを取得する場合にはRequestのパラメータとしてPC用か携帯用かどちらかを指定するため、両方の商品URLを1度に取得することはできない。


楽天のアフィリエイト作成ツールでは、PC・携帯共通URLを作成できる。

例(分かりやすいようにURLデコード&改行してある)
http://hb.afl.rakuten.co.jp/hgc/[アフィリエイトID]/?
pc=http://www.rakuten.co.jp/verjus/827100/665544/705842/#845704
&m=http://m.rakuten.co.jp/verjus/i/845704/

これを見るとPC用URLから携帯用URLを作成できそうだが、楽天の商品URLには下記の2種類のタイプがある。
A. http://item.rakuten.co.jp/monoshop/dul_ch06_k282/

B. http://www.rakuten.co.jp/t-plaza/710008/716540/#727421
Aが昔ながらのURL?
Bは携帯からも見られる商品用のURL?
いくつかデータを見てみると、Bの場合は色違いなどで複数の商品から選べるアイテムのようだ。この例の場合、"710008" "716540"の2種類。4種類くらいのアイテムもあり、その場合スラッシュ区切りで4つのコードが並ぶ。おそらく最後のシャープ付のIDで内部的には制御してるようだ。

さらに調べると、携帯版の楽天とPC向けの楽天では商品数がかなり違う。PCの方が数倍多い。
しかも、携帯版の楽天はドメインがwww.rakuten.co.jpのアイテムのみが対象になってる(ような気がする)。(数えるほどしか調べてないのでたまたまそういうデータを見ただけかもしれないが。)

ただし、wwwで始まる商品でも携帯版楽天で探してもヒットしないものもあるので、wwwで始まれば携帯からアクセスできるというわけではないようだ。
よく見たらwwwで始まりPCでしかヒットしない商品は全て品切れだった。たくさんのデータで検証したわけではないが、このサブドメインの違いで携帯からのアクセスが可能か判断できそう。


結論(ただし推測)
サブドメインがwwwの商品のみ、携帯版楽天からアクセスできる。その場合、下記のアフィリエイトURLによりPC・携帯で共通のアフィリエイトリンクになる。
(見やすくするために改行したが実際には改行しない。また、パラメータのURL部分はURLエンコードすること)
http://hb.afl.rakuten.co.jp/hgc/[アフィリエイトID]/?
pc=http://www.rakuten.co.jp/[ショップID]/.../.../.../#[商品ID的なもの]
&m=http://m.rakuten.co.jp/[ショップID]/i/[商品ID的なもの]/
モバイル用の"i"の部分とかは怪しいかも。

ブログ アーカイブ

tags