MW211 EXIT

devlog
jQuery/ツリー開閉機能
2012年05月20日
HTML側で以下のような感じで、プラス・マイナスアイコン(img)と、
開閉領域(div)を定義してあげる。
┌──────────────────────────────────────┐
│└<img id="T1" src="minus.jpg"/>親<br/><div id="_T1" style="display:block;">│
│  └子<br/></div>                                                           │
└──────────────────────────────────────┘

そして、jQuery側では以下のようにtoggleメソッドを定義してあげればよい。
┌──────────────────────────────────────┐
│$('img').toggle(                                                            │
│     function() {                                                           │
│         $(this).attr('src', 'minus.jpg');                                  │
│         $('#_' + $(this).attr('id')).css('display','block');               │
│     },                                                                     │
│     function() {                                                           │
│         $(this).attr('src', 'plus.jpg');                                   │
│         $('#_' + $(this).attr('id')).css('display','none');                │
│     }                                                                      │
│);                                                                          │
└──────────────────────────────────────┘

ただ、toggleメソッドは頭が固くて初期表示時に開閉が混在していると役に立たない。
ってことで、以下のようにif文で地道にやるのも全然悪くない。
┌──────────────────────────────────────┐
│$('img').click(function() {                                                 │
│    if ($(this).attr('src') == 'plus.jpg') {                                │
│         $(this).attr('src', 'minus.jpg');                                  │
│         $('#_' + $(this).attr('id')).css('display','block');               │
│    } else {                                                                │
│         $(this).attr('src', 'plus.jpg');                                   │
│         $('#_' + $(this).attr('id')).css('display','none');                │
│    }                                                                       │
│});                                                                         │
└──────────────────────────────────────┘
分類:jQuery
セッション情報の盗み見を試みたが…
2012年05月19日
┌──────────────────────────────────────┐
│session_start();                                                            │
│var_dump($_SESSION);                                                        │
└──────────────────────────────────────┘
上記のようなphpソースを実行させれば、セッション情報が表示できるはず。
だったら、これを自分のところに送信させれば悪用できるんじゃない?と思った。

例えば、どこかのサイトにログインしてセッション情報が生成されていた時に
これを使ってそのセッション情報を取得すれば
そのサイトになりすましでログインして…みたいなことができてしまうのでは…
というか、そんなことされたら怖いなと思った。

でも、よく考えてみると、ここで表示されるセッション情報の内容は
これを仕込んだサーバのセッション情報であり、
他サーバのセッション情報でなく、それは取得できないのであった。
めでたし、めでたし
HTML/文字列の表示の不思議
2012年05月18日
なんだかわからんが、「-」が混じってるとそこで改行されしまうんだよね。

音節の区切りだからなんだろうけど…。

他にこういう文字ってないのかな?

対処法(改行させない方法)としては
「div {white-space:nowrap;}」みたいなスタイルにするとからしい。
分類:HTML
UTF-8/マルチバイト文字の長さ
2012年05月17日
マルチバイト文字(日本語文字)について、
「SHIFT_JIS」は「2バイト」、「UTF-8」は「3バイト」…などと
誤って覚えちゃダメです。
UTF-8のマルチバイト文字は(一文字当たり)、「1バイト~4バイト」なのです。

各バイトの先頭ビット辺りにバイト長の識別子が付加され、
その残りで文字を識別する。
┌────┬──────────────────┐
│1バイト │0_______                            │
├────┼──────────────────┤
│2バイト │110_____ 10______                   │
├────┼──────────────────┤
│3バイト │1110____ 10______ 10______          │
├────┼──────────────────┤
│4バイト │11110___ 10______ 10______ 10______ │
└────┴──────────────────┘

ざっとこんな感じ(なのか?)
┌──────────────────┐  ┌─────────────┐
│0AAAAAAA                            │→│                  0AAAAAAA│
├──────────────────┤  ├─────────────┤
│110AAAAA 10BBBBBB                   │→│         00000AAA AABBBBBB│
├──────────────────┤  ├─────────────┤
│1110AAAA 10BBBBBB 10CCCCCC          │→│         AAAABBBB BBCCCCCC│
├──────────────────┤  ├─────────────┤
│11110AAA 10BBBBBB 10CCCCCC 10DDDDDD │→│000AAABB BBBBCCCC CCDDDDDD│
└──────────────────┘  └─────────────┘

なにかとサニタイズで話題の「/」ですが…。

「/」は「0x2F」なわけだが、以下の四つはすべて「0x2F」=「/」を表すことになる。
上記の法則に照らし合わせてみれば、以下の様々なパターンが該当する。
┌──────┬──────────────────┬
│2F          │00101111                            │
├──────┼──────────────────┼
│C0 AF       │11000000 10101111                   │
├──────┼──────────────────┼
│E0 80 AF    │11100000 10000000 10101111          │
├──────┼──────────────────┼
│F0 80 80 AF │11110000 10000000 10000000 10101111 │
└──────┴──────────────────┴
                                      ┬──────────────────┐
                                      │                           _0101111 │①
                                      ┼──────────────────┤
                                      │                  ___00000 __101111 │②
                                      ┼──────────────────┤
                                      │         ____0000 __000000 __101111 │③
                                      ┼──────────────────┤
                                      │_____000 00000000 00000000 __101111 │④
                                      ┴──────────────────┘

で、①②③は「bin2hex()」で「/」に変換できたが、④は変換できなかった。
「/」を「hex2bin()」で変換すると「2F」となった(最短優先みたい)。
分類:文字コード
設計/アカウントのロックアウト
2012年05月16日
「アカウントのロックアウト」とは、
ユーザアカウントを凍結して、ログインできないようにすること。

パスワードを闇雲に試してみようとする輩を排除するために、
一定回数以上パスワードを間違えると、
自動的にそのアカウント(ログインID)が使えなくしたりする。

ただし、第三者がログインIDを知っている場合、そのアカウントになりすまして
わざと誤ったパスワードを何回も入力し、アカウントをロックアウトしてしまうという
嫌がらせができてしまうわけだ。

銀行ATMでも同様の機能があるが、ログインIDにあたるのがキャッシュカードであり
これは容易に他人の手に渡らないので大丈夫。
でも、ログインIDとなるとそこまでのセキュリティ感覚は働きづらい。

この点を考慮せず(甘く見て)、その復旧を管理者の手動とかに設計すると
年中無休即時対応のサポート並みに地獄をみることになる…かも。

だから、回復方法としては、一定時間おいたら自動的に復旧させる、
当事者にアカウントがロックした旨のメールを出して自分で復旧してもらう、
とか自動化が必要だ。

あ、そうそう、「アカウントのロックアウト」には
迷惑行為をする輩を締め出すためって場合もある。
ま、これは懲罰処置だから、ロックアウトしちまえば終わり。
あと、これこれこういう理由でロックアウトしたよって通知すれば親切だね。
分類:設計
IE/JavaScriptをローカルで実行する時の警告文
2012年05月15日
Internet Explorerで、ローカルファイルを開いた時に、
そこにJavaScriptが実装されていると、いちいちメッセージが表示されて
JavaScriptの実行が制限される。

IE8以前だと以下のようなメッセージが表示される。
┌──────────────────────────────────────┐
│セキュリティ保護のため、                                                    │
│コンピュータにアクセスできるアクティブコンテンツは表示されないよう、        │
│Internet Explorerで制限されています。                                       │
│オプションを表示するには、ここをクリックしてください..                      │
└──────────────────────────────────────┘
IE9だと以下のようなメッセージが表示される。
┌──────────────────────────┌──────────┐┐
│スクリプトやActiveXコントロールを実行しないよう、   │ブロックされている  ││
│               Internet Explorerで制限されています。│コンテンツを許可する││
└──────────────────────────└──────────┘┘

これは、既定で制限設定となっているからだ。

【ローカルファイルでJavaScriptが使えない(既定)件】
メニューバーから「ツール」→「インターネットオプション」を選択し、
以下のように適用
┌──────────────────────────────────────┐
│インターネットオプション                                                    │
├──────────────────────────────────────┤
│                                                                ┌────┐│
│                                                                │詳細設定││
│┌───────────────────────────────┘        ││
││┌設定────────────────────────────────┐││
│││■セキュリティ                                                      │││
│││  ■マイコンピューターのファイルでのアクディブコンテンツの          │││
│││                                                    実行を許可する*│││
││└──────────────────────────────────┘││
││  *Internet Explorerの再開後に有効になります。                         ││
│└────────────────────────────────────┘│
│                                                    ┌──┐┌──┐┌──┐│
│                                                    │ OK ││    ││適用││
│                                                    └──┘└──┘└──┘│
└──────────────────────────────────────┘
分類:ブラウザ
Apache/公開ディレクトリの設定
2012年05月14日
「htpd.conf」で以下の設定を行う。

DocumentRootを適当なものにする。
┌──────────────────────────────────────┐
│DocumentRoot "C:/www"                                                       │
└──────────────────────────────────────┘
一応、設定もしておく。
┌──────────────────────────────────────┐
│<Directory "C:/www">                                                        │
│    Options Indexes FollowSymLinks Includes ExecCGI                         │
│    AllowOverride All                                                       │
│    Order allow,deny                                                        │
│    Allow from all                                                          │
│</Directory>                                                                │
└──────────────────────────────────────┘

エイリアスをつかって、パスを割り付ける。
┌──────────────────────────────────────┐
│<IfModule alias_module>                                                     │
│    Alias /■ "C:/www/■/htdocs"                                            │
│</IfModule>                                                                 │
└──────────────────────────────────────┘
そこの設定もしておく。
┌──────────────────────────────────────┐
│<Directory "C:/www/■/htdocs">                                              │
│    Options FollowSymLinks                                                  │
│    AllowOverride All                                                       │
│    Order allow,deny                                                        │
│    Allow from all                                                          │
│<IfModule mod_rewrite.c>                                                    │
│    RewriteEngine On                                                        │
│    RewriteBase /■/                                                        │
│    RewriteRule !\.(js|ico|gif|jpg|png|bmp|css|csv|pdf)$ index.php          │
│</IfModule>                                                                 │
│</Directory>                                                                │
└──────────────────────────────────────┘

以上。
PHP/Shift_JISとUTF-8
2012年05月12日
「UTF-8」にあるのに「Shift_JIS」にはない文字というのがある。

(マルチバイト文字)「1文字」に対して「Shift_JIS」は「2バイト」使うのに対して
「UTF-8」は「3バイト」とか使うのだから、当然そういう文字があっても不思議はない。

で、そういう文字を「UTF-8→Shift_JIS」変換したらどうなるのか?
大抵は「?」とか特定の文字に変換される。
┌──────────────────────────────────────┐
│mb_convert_encoding('■', 'SJIS-win', 'UTF-8');                             │
└──────────────────────────────────────┘
この結果は「?」となる。(「■」が「UTF-8」固有文字だったとする)

┌──────────────────────────────────────┐
│mb_convert_encoding('あいう■えお', 'SJIS-win', 'UTF-8');                   │
└──────────────────────────────────────┘
ちなみにこういう混在している場合は「あいう?えお」となる。
→他の文字に悪影響は与えない

では、「UTF-8→Shift_JIS→UTF-8」と行って来い変換した場合は?
┌──────────────────────────────────────┐
│mb_convert_encoding(mb_convert_encoding('■', 'SJIS-win', 'UTF-8'),         │
│                    'UTF-8',                                                │
│                    'SJIS-win');                                            │
└──────────────────────────────────────┘
結果は「?」。

一旦「?」になってしまったら、もう「?」なのだ。
分類:PHP、文字コード
PHP/ホスト名を取得する方法
2012年05月11日
┌──────────────────────────────────────┐
│$ip = getenv("REMOTE_ADDR");                                                │
│$host = getenv("REMOTE_HOST");                                              │
│if (($host == NULL) || ($host == $ip)) {                                    │
│  $host = gethostbyaddr($ip);                                               │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP
PHP/IPアドレスを取得する方法
2012年05月10日
┌──────────────────────────────────────┐
│$ip = getenv("REMOTE_ADDR")                                                 │
└──────────────────────────────────────┘
分類:PHP
前へ 1 … 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 … 156 次へ