HTTP概論

HTTP関連の脆弱性の前に一通りのまとめ。
今まで何となくだったことをとりあえず納得するレベルで整理。
 

GetとPost

よく、Getは危ないからPostにしろとか言うアレ。
どちらもCGIとかサーブレットとかでwebサーバーに値を渡すときに使う手段。
たとえば掲示板に書き込むときには 名前、メアド、タイトル、本文、なんかがサーバーに渡されて、それを解釈して書き込みが実行される。
この名前だの本文だのを渡す方法がGetとPostなのである。
で、具体的に両者がどう違うのかと言えば・・・

Getメソッド

値渡しはURLを介して行う。
つまりは
www.hogehoge.com/chat.cgi?name=foo&comment=bar
なんて風に値が渡される。(この場合、name変数にfoo comment変数にbar ですね)
このデータは最大で255文字まで(URLの記述全てを含む)で、環境変数であるQuery_String に格納される。
さて、よくヤバイといわれるGetだが何がヤバイかと言えば、
渡される値がURLに直接記述される
ということ。
つまりログにばっちり残るし、URLをみれば内容丸わかり。
さらに悪用しようと思えば、アンナコトやコンナコトを記述したURLを田代砲よろしくバカスカ送れば簡単に荒らしだの多組織票だのDoS攻撃だの出来てしまいます。
高校の頃はどこぞのwebチャットでステルスログイン(入室しました の表記無しに発言する)が流行りましたがあれもこいつの応用例ですね。
 
どうでもいいけどあのころ(98-02ごろ)は串さしてホスト名変えるだけでも勤務中にチャットしてるOLのお姉様方に大人気だったように記憶しています。ステルスでログインしてホスト名ポコポコ変えれば「すごーい」だった時代。ああ懐かしい。
今思い返したら痛いだけですがw
 

POST

で、Postですよ。
こっちはwebサーバーの標準入力から値を渡す方式。
具体的には、Formタグで括ったsubmitボタンを押すと情報がまとめて送られる奴です。
なんだかんだで最近はみんなこれですね。
こいつはURLに値を含まないし、アクセスログにも記録されない。まあ必要に応じてサーバー側は記録できるわけですが、自分のブラウザに残っちゃうなんてコトはあまりないです。
つまりそれだけセキュアなのね。
 

Referrer

リファ、リファラリファラー、どれも同義
要はどこから来ましたよーっていう情報。
はてなダイアリーリンク元に近いね。ていうかアレそのもの?
これ自体はまあHTTPで標準実装されてる変数の一つなんだけど、先のGetメソッドで送られる情報なんかも一緒に記録されちゃうからたまにイヤンなコトが起きる。
 
昔はうっかり隠しサイトからリファラ記録してるページに飛んでヒミツのURLが丸見えなんてほほえましい事例もあったけど最近はどうなのやら。
 

Cookie

クッキー。モンスターがむしゃむしゃ食べるアレ。
セッション状態を管理するためにブラウザ経由で作成されるファイル。
IEなら、Internet Temprary Files の中にたくさんある。
一つのクッキーには最大4096バイト記録可能で、
一つのブラウザは最大300個のクッキーを保持可能。
また一つのWebサーバーは一つのPCに対して最大20個まで発光可能。
いくつか固有の属性があって、それを元にいろいろな情報が管理される。
たとえば、有効期限や有効ドメイン、有効ディレクトリやセキュア属性など。
それぞれクッキーの適用範囲や消滅までの期限、クッキーを送信する条件などを指定する。