MW211 EXIT

devlog
JavaScript/変更を反映させる
2012年04月30日
JavaScriptのソースコードを変更しても、
既に動作中のユーザがブラウザに前の状態をキャッシュし続けて反映されない、
という問題に出くわした場合の対処方法の一例。

┌──────────────────────────────────────┐
│<script type="text/javascript" src="javascript.js?1.0"></script>            │
└──────────────────────────────────────┘
上記のように「?バージョン」みたいなパラメータを付加しておいて、
ここの値を変えてあげれば再読込してくてる。
#この方法は、HTMLソース(テンプレート)の変更が必要ってことになる
分類:JavaScript
PHP/セッションのまとめ
2012年04月28日
┌─────────┬────────────────────────────┐
│クッキー          │ブラウザ側(クライアント側)に記録される情報              │
│                  │有効期限を設定できるが、たいていはブラウザを閉じたら消滅│
│                  │セッション情報についてはIDのみを記録する                │
│                  │※ブラウザ側にあるものなので、詳細な情報を記録すると    │
│                  │  容易に改竄されてしまうおそれがある                    │
├─────────┼────────────────────────────┤
│セッションファイル│サーバ側に記録される情報                                │
│                  │セッション情報の中身を記録している                      │
│                  │※ファイルを開くと「;」区切形式で容易に内容を確認できる │
│                  │正規の手続きとしては「session_destory()」で削除するが、 │
│                  │その処理が漏れた場合(ブラウザの直接終了など)を考慮し    │
│                  │「php.ini」の設定により、一定の間隔で削除する           │
├─────────┼────────────────────────────┤
│セッションID      │クッキーとセッションファイルを結びつけるID              │
│                  │「session_start()」で生成もしくは使用される             │
└─────────┴────────────────────────────┘
・「session_start()」した場合
  クッキー中からセッションIDを探す
  ・セッションIDがある場合
    そのセッションIDと対応するセッションファイル(セッション情報)を使用する
  ・セッションIDがない場合
    セッションIDを生成し、それに対応するセッションファイルを生成するとともに
    クッキーにセッションIDを記録する
・「session_destory()」した場合
  ・セッションファイルを削除する
────────────────────────────────────────
Q.セッションIDおよびセッションファイル生成後、
    セッションファイルを直接削除したらどうなる?
    #「php.ini」の設定による一定の間隔での削除もこれと同等のはず
A.セッションファイルがない場合、
    別のセッションIDおよびセッションファイルを生成します
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Q.ブラウザを一旦閉じて、「session_start()」し直した場合はどうなる?
A.「session_destory()」を行わないと、セッションファイルは残ったままだが
    クッキー側にそれに対応するセッションIDが記録されていないので、
    別のセッションファイルが生成される
    ただし一部のブラウザ(IE)では、見た目上ブラウザが終了したように見えても
    プロセスとして残り続けている場合があり、
    引き続き同一セッションファイルを継続使用するケースがあるので注意
    →ブラウザを終了させず、タブだけを終了させた場合と同様
────────────────────────────────────────
分類:PHP
InterneteExplorer/submitボタンの配置注意
2012年04月27日
IE(IE9)の場合、form中にカーソルがあると、カーソルあるところと共に
そのformに属するsubmitボタンが強調される。
  ・カーソルのあるところ                          →外太枠&内点線枠
  ・カーソルのあるところが属するformのsubmitボタン→外太枠
また、これ(submitボタン)が複数あった場合は、最初のボタンが強調される。

きっと、submitする時はここを押してねっていう
アピールかなんだろうけどなんか余計な感じだ。

CSSとかで回避する方法は今のところわからないが、
submitボタンを、buttonボタンにして、
JavaScript側でsubmit()することで回避することはできる。
#但し、この場合、送信されていたsubmitボタンのラベル名が
  (buttonボタンのラベル名としては)送信されなくなるので注意。
  別途hidden属性かなんかで代替する必要あり

submitボタンだろうが、buttonボタンだろうが、JavaScriptで制御するから
どっちでもいい、なんて適当に配置していると、
IEの場合にボロが出る(不自然な位置の第一submitボタンが強調される)という
結構危険な問題だ(初期設計時に心得ておいた方がよい)。
分類:ブラウザ、HTML
画面をリフレッシュする方法
2012年04月26日
いろいろある。

【1】メタタグを使う方法
┌──────────────────────────────────────┐
│<meta http-equiv="Refresh" content="秒"/>                                   │
└──────────────────────────────────────┘

【2】JavaScriptを使う方法
┌──────────────────────────────────────┐
│<script type="text/javascript">                                             │
│  window.onload = function() {                                              │
│    setTimeout("location.reload()", ミリ秒);                                │
│  }                                                                         │
│</script>                                                                   │
└──────────────────────────────────────┘
分類:JavaScript、HTML
IEのバグ
2012年04月25日
IE8で、文字サイズを「最大」にしてから「中」に戻すと、
ファイルアップロード用のボタン名が大きいまま元に戻らない。
#普通のボタンでは起こらない、ファイルアップロード用ボタンのみの問題

IE9ではなおっている
分類:ブラウザ
ブラウザ/戻るボタンの挙動
2012年04月23日
┌──────────────────────────────────────┐
│<meta http-equiv="Pragma"        content="no-cache"/>                       │
│<meta http-equiv="Cache-Control" content="no-cache"/>                       │
│<meta http-equiv="Expires"       content="0"/>                              │
└──────────────────────────────────────┘
上記をHTMLヘッダ部(メタ部)に記述すると、ブラウザの戻るボタンで
一度表示済みの画面へ戻っても再読込してくれて最新の情報を取得してくれる。
#ま、逆にいえば、キャッシュを読んだ方が速いって話でもあるんだけど

ただし、Safariではこれは効かないようだ。
#ついでにIEでは、容量が小さい(32KB未満)と効かないようだ(効かなかった?)

さてそれはさておき、Chromeではこれらと趣が一風異なる。

なんと別途、入力欄に入力中の文字列を記憶しており、
再読込してくれて最新の情報を取得してくれた挙げ句、
以前に入力していた内容を上書してくれるのだ。

しかも、厄介なのは、name属性が配列で添字がない(例:name="id[]")と、
前詰めで復元されてしまうのだ。
つまり、三行目当たりに入力していたのに、戻ったら一行目に移動してたりするのだ。
しかも、元々一行目に値があったら上書きされてしまっているのだ。

まとめるとこんな感じ。
┌────────┬─────────┬─────────┐
│                │ 最新の情報を取得 │入力中だった内容を│
├────────┼─────────┼─────────┤
│InternetExplorer│       する       │    クリアする    │
├────────┼─────────┼─────────┤
│Firefox         │       する       │    クリアする    │
├────────┼─────────┼─────────┤
│Chrome          │       する       │     復元する     │
├────────┼─────────┼─────────┤
│Safari          │      しない      │   クリアしない   │
└────────┴─────────┴─────────┘
分類:ブラウザ
PHP/サニタイズ漏れ検出方法
2012年04月22日
簡単にサニタイズ(XSS対策)漏れを検出する方法。

以下の文字列を手当たり次第、各項目に登録して表示させる。
┌──────────────────────────────────────┐
│<script>alert("@");</script>                                                │
└──────────────────────────────────────┘

アラートダイアログが表示されたら負け(サニタイズ漏れ)だ。
分類:PHP
PHP/特殊文字の変遷
2012年04月21日
今さらながら…、サニタイズして表示した特殊文字って、POSTした場合どうなるの?

「'」は「&#039;」にエスケープされる訳だが、以下のように設定してPOSTしてみた。
┌──────────────────────────────────────┐
│<input type="hidden" name="test" value="&#039;"/>                           │
└──────────────────────────────────────┘
結果は以下の通り、「'」に戻ってる。
┌──────────────────────────────────────┐
│echo $_POST['test'];  →「'」                                               │
└──────────────────────────────────────┘
だから、「'」とか表示させたものをそのまま再入力することができるんですね。

DBから読み出して、画面表示して、POSTして、またDBに戻した場合
例えば「'」は、以下のような変遷を経ることになる。
┌──────────────────────────────────────┐
│┌──┐                                                                    │
││┌───┐                                                                │
│││  '   │…DB上の元の値                            …(1)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…PHP変数として取得される値               …(2)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││&#039;│…画面表示のためにサニタイズされた値      …(3)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…POSTされた値(PHP変数として取得される値) …(4)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  \'  │…SQLインジェクション対策で変換された値   …(5)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…再度DB上に格納された値                  …(6)                 │
││└───┘                                                                │
│└──┘                                                                    │
└──────────────────────────────────────┘

【おまけ】
ちなみに、「TRUE」の場合、(1)(2)は「TRUE」、(3)(4)(5)で「1」、(6)で「TRUE」、
「FALSE」の場合、(1)(2)は「FALSE」、(3)(4)で「」、(5)(6)で「FALSE」
ってところか。

「if ($_POST['test'])」ってした場合、「1」で真、「」で偽になるしね。

でも大抵は、チェックボックスとか別の形式になるんだけど。
分類:PHP
PHP/php_curlの使用方法
2012年04月19日
「php.ini」の「extension=php_curl.dll」を有効(先頭の「;」を除去)にして再起動。

【追記】
  「libeay32.dll」と「ssleay32.dll」へのパス設定も必要。
  これらは「php.exe」や「php.ini」があるPHPフォルダにあるので
  Windowsの環境変数で設定してあげればよい。(例「Path=C:\Program Files\PHP」)
分類:PHP
正規表現/文字コードの中身
2012年04月15日
正規表現で頻出の「[\x21-\x7E]」の中身は以下の通り。
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│\│_0│_1│_2│_3│_4│_5│_6│_7│_8│_9│_A│_B│_C│_D│_E│_F│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│2_│  │! │" │# │$ │% │& │' │( │) │* │+ │, │- │. │/ │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│3_│0 │1 │2 │3 │4 │5 │6 │7 │8 │9 │: │; │< │= │> │? │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│4_│@ │A │B │C │D │E │F │G │H │I │J │K │L │M │N │O │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│5_│P │Q │R │S │T │U │V │W │X │Y │Z │[ │\ │] │^ │_ │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│6_│` │a │b │c │d │e │f │g │h │i │j │k │l │m │n │o │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│7_│p │q │r │s │t │u │v │w │x │y │z │{ │| │} │~ │  │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

なので英数字以外の記号といったら、以下を意識するとよいだろう。
「!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~」
分類:正規表現
前へ 1 2 3 次へ