Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

META REFRESH as a Response Header

すごく興味深かったのでメモ。


In this short educational piece, Amit Klein draws the reader's attention to an uncommon way of performing redirection, and its security importance.

HTMLのmetaタグですが、HTML 4.01のスペックではhttp-equiv属性にRFC822形式のHTTPレスポンスヘッダを指定可能とのこと。知らなかった。。。
よくありがちな

<meta http-equiv="Refresh" content="0; url=http://www.google.co.jp/">

も、HTTPサーバから「Refresh」というHTTPレスポンスヘッダが送信されたのと同じことになります。試しにPHPで書いてみると、

<?php
header('Refresh: 0; url=http://www.google.co.jp/');

と等価で、実行してみると見事に

HTTP/1.x 200 OK
Date: Tue, 13 Mar 2007 11:44:07 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.7a PHP/5.2.1
X-Powered-By: PHP/5.2.1
refresh: 5; url=http://www.google.co.jp/
Content-Length: 106
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=Shift_JIS

というレスポンスヘッダが返されます。
metaタグの内容を動的に作ることはあまりないかも知れませんが、当然、外部からのパラメータをそのままcontentsの内容に使ってたりすると目も当てられない状態になりかねませんね。今後意識しておいて損はないと思います。