« April 2006 | Main | June 2006 »

フィーダーのイニシャライズ

May 20, 2006

PYLORI-KIMのテストがようやく終わったと思ったら、
今度は、AoD0.9で問題が。。。

この間も問題を報告して下さったKAZ氏より、コメント。
「 たまにPHSの低速回線でつなぐのですが ページを読み終わるぐらいのところでエラーが出てブラウザが「ページが表示できません」の画面になります。 構文エラーと出るのですが、。。。」

これは多分、以前こちらで対策したIEの問題だと見当をつけた。

ここだけの話、以前の対策は、
「フィーダーへのフィードを5秒間待って、
フィーダーのイニシャライズ(「関連商品」ボタンの有効化)をかける」
という単純なもので、
本格的な対応を考えなくてはと思っていた矢先。

で、今回は細かく念入りの対策をしてみた。
フェーズ1)
ページのロード完了前に、フィーダーが読み込まれた時にフィード開始。

フェーズ2)
ページのロード完了後に、フィードの完了を待ち始める。

フェーズ3)
フィードの完了後、フィーダーのイニシャライズをかける。

今回のポイントはフィードの完了を検知出来るようにしたこと。
これは、PYLORI-KIMで実装した方式の応用。

尚、フィードのタイムアウト時間は30秒
イニシャライズの遅延時間は0.5秒
とした。

これで、一時フィードは今まで通りページのロードを待たずに表示し、
「関連商品」ボタンはロード完了後にクリック出来るようになる。

フィードのタイムアウトを十分長く取れば、フェーズ2は要らないはずで、
「関連商品」ボタンももっと早く有効に出来るのだけど、
念には念を入れて、待つことにした。
でも、通常はフェーズ2,3はほぼ同時で、
以前(単純に5秒待つ)よりは早く有効になるはず。
が、ページ自体のコンテンツが重いと結局遅くなるのか。。。

ってこれでうまく行かなかったら、どうしよう。。。

ユン

フィード、フィーダー、フェーズって紛らわしいなぁ。

<用語解説>
フィーダー)
餌箱の意。
ここでは、AoDのタグが貼られてるページ内のエリアのこと。
サーバーからここに商品情報が動的にフィードされる。

フィード)
餌を与えることの意。
ここでは、サーバーからフィーダーに対して商品情報を送信すること。

フェーズ)
進行状況の段階、局面。
ここでは、AoDプログラムの実行状況の各局面をさす。

PYLORI-KIM β2

May 19, 2006

何故か私のブログをIEで見たときだけ、
ポップアップ広告内の文字が見えなくなるという問題が発生していました。

これは、またしても、
IEのCSSのバグ
「背景指定があるボックスの中のfloat指定周辺の文字列が表示されない

対策
「背景指定があるボックスにwidthを指定する」

もう、ぷんぷん。

でも、自分のサイトで良かったよ。

ゆん

参考サイト
float指定時の問題(各ブラウザ)

開発コード「PYLORI-KIM」

May 18, 2006

AoD 2.0βを勝手に命名。(乳酸菌の方がよかった?)

AoD 0.9を貼って頂いてる方にもテスト公開します。

好きなワードを
<a name="AOD" rev="tag">ピロリ菌</a>
のように
<a name="AOD" rev="tag"></a>
で囲むだけ!
※但し、AoD0.9を貼っているページに限ります。

<必須属性>
name="AOD" に固定です。
rev="tag" に現状固定です。

<オプション属性>(省略可能)
rel="<type>:<id>"
<type>: アフィリエイトプログラムのタイプを指定します。
    使用可能な値
    amazon: アマゾンアソシエイト用
    rakuten: 楽天アフィリエイト用
    a8rakuten: A8.netで楽天アフィリエイト用
    ※省略した場合は、amazonとなります。
<id>: アフィリエイト(アソシエイト)IDを指定します。
    ※省略可能です。

charset="<charset>"

<charset>: サイトの文字コードを指定します。
    使用可能な値
    utf-8, UTF-8, euc-jp, EUC-JP, shift_jis, Shift_JIS
    ※デフォルトでは、ページヘッダの Content-Type METAタグの値を自動取得し使用します。
    ※このオプションを指定した場合は、この値を優先します。

<使用例>
例1)最小 ピロリ菌
<a name="AOD" rev="tag">ピロリ菌</a>

例2)通常 ピロリ菌
<a name="AOD" rev="tag" rel="amazon:logicaextensi-22">ピロリ菌</a>

例3)フルオプション ピロリ菌
<a name="AOD" rev="tag" rel="rakuten:0272ed90.840d8364" charset="euc-jp">ピロリ菌</a>

ユン

AoD 2.0βテスト

May 12, 2006

ボスブログこちらの記事
にベータ版を入れてみましたが。。。

好きなワードをタグで囲むだけで、クリックしてポップアップするAoDが作れます。

これに、(↓こんな感じ)
関連するニュースやソーシャルブックマークやマップ等
いろいろフィード出来るといいですね。

どぅっすか?

ユン

デグレード&バグFix

May 06, 2006

先日来からのセキュリティ強化のアップデート中に、
重大なデグレードを起こしてしまいました。

新規作成されたタグ情報の保存が有効にならない!!

という重大かつダサいバグを作りこんでしまいました。

大変に申し訳ありませんでした。OTL

今、直しましたんで、もう一度お試しを。。。っと叫ぶ。

ユン

PS:
このデグレードに見舞われた方のブログには、コメントさせてもらいました。
失礼致しました。

また、別件で、
同じページにAoDを複数貼った場合で、
かつ、別のAoDフィーダーに同じ商品があった場合に、
「関連する商品」ポップアップが動かないバグを修正しました。

CSRF対策

May 03, 2006

リファラのチェック以外のCSRF対策をしてみた。

ので、
リファラの無い場合でも、Myフィーダーの管理が出来るようになりました。

が不安は残る。。。

一旦、これで様子を見たいと思います。

念の為、自分の為にも、メモを残しておきます。

セッション関係のまとめ

1.ログイン処理
それ自体がIDとパスワードで保護されているので、特に対策は必要ない。
それらが漏洩した場合は論外。
が、セッションを張るときに、セッション固定攻撃対策として
セッションIDの再初期化 session_regenerate_id(TRUE);

CSRF対策用トークンの発行
は行っておく。

2.実行処理
CSRF対策が必要な(情報の更新や削除を実行する)処理の前画面では、
hiddenにCSRF対策用トークンをセットし、実行処理で、
_POST(_GET)と_COOKIEと_SESSION内のSRF対策用トークンをチェックする。
さらにリファラがあれば、リファラのチェックもする。
(やっぱりリファラのチャックが一番良さそうだけど。)

3.PHPのセッション
PHPの_SESSIONを使用する場合、
    session_start();
が必要だが、このままだと無条件で勝手に
(ログイン前に、ログインしているかどうかチェックする時だけでも)
セッション用のクッキーが発行されてしまうので、危険。
セッションが必要な場面でも無条件にPHPの先頭に入れてはダメ。
クッキーでのみセッションを管理するようにする。
ログイン処理は1.の通り。ログインが成功した後でスタートする。
ログイン処理以外は、session_start();の前に
    $_COOKIE[session_name()]
をチェックし、無ければその時点でセッションが無いことが解るので、無用なスタートはしない。
スタートした後に無効なセッション用のクッキーがあったら削除する。
もちろんログアウト処理でも削除する。
これで、常に新しいセッションがログイン処理の時にのみ生成される。

4.セッションハイジャック
最終的には、SSLを使って、セッション用のクッキーにsecure属性を付けるしかないの?

これでいいのか?
いろんな議論を読んでもまだ納得出来ない。
頭がこんがらがってきた。。。

AoDはそんなにシビアに考える程のシステムじゃないよーな気もするけどね。

ユン

参考サイト
PHP でセッション変数、Cookie を使用する際のセキュリティ対策について
開発者のための正しいCSRF対策
クロスサイトリクエストフォージェリ対策
CSRF対策に「ワンタイムトークン」方式を推奨しない理由
セッション固定攻撃

リファラ

May 02, 2006

どうもすみません。

不正使用(スパム使用)を防ぐために、
フィーダーにリファラのチェックを入れていました。

その為に、タグ作成時にURLを入力して頂いているのですが。。。

すると、
(ブラウザ、ファイアウォール、ルータ、プロキシ等の設定により)
リファラが送信されなかった(サーバーで受信出来なかった)場合に、
フィーダーが表示されないエラーが発生していました。

そこで、フィーダーでのリファラのチェックをゆるくしました。
これで問題が解決されると思うのですが。。。

ただし、Myフィーダー管理(更新/削除)は、
セキュリティ(CSRF対策)のためにリファラのチェックを当面必須とする方向で。
今後きちっとした対策を検討します。

ユン

ちなみに、念の為、
リファラが送信されているかどうかのチェックは、
こちら「GAMECITY オンラインレスキュー 【リファラー情報の送信テスト】」
で出来ます。