プロが教える店舗&オフィスのセキュリティ対策術

下のリンク先のソースに、
<link rel="stylesheet" href="http://cdn-ak.b.st-hatena.com/css/common.css?809 … type="text/css" media="all" />
という行があります。こういう具合に拡張子 .css の後ろに暗号みたいな文字列がついてるのはたまに見かけるのですが、
どういう意図というか意味というか機能があるのでしょうか、ご教示ください。

▼スカート教授に会いに行く
http://b.hatena.ne.jp/articles/201206/9090

A 回答 (5件)

HPの管理者がcommon.cssを修正してアップロードした場合、閲覧者は修正前のキャッシュが残っていて修正前の見え方になってしまうことがあります。



管理者が意図しない見え方をされることを防ぐために
ランダムな文字列をつけています。

無理やり別のファイルだということを認識させて古いキャッシュを読まないようにしているのですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。意外な回答で、なるほどです。
たしかに「修正してアップロードしたのにキャッシュが残っていて修正前の見え方になる」ことはありますね。
.css の後ろに「?で始まるてきとーな文字列」をつけると、
「別ファイルと認識される、かつ、パスとしては無視してくれる」ということでしょうか。

しかしながら、
それだけの理由にしてはなんだかずいぶん念入りに無駄に長いこと(ユニークな文字列が必要なのであれば、
年月日時分秒でも足りるはず)と、
「?809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8%22」をググるといくつかヒットすることから、
いまいち納得できないのですが。

お礼日時:2012/07/02 22:52

 Windows使いですね。

Windowsの束縛から脱しましょう。
 Windowsは、拡張子がすべてのようなOSですが、他のOSは拡張子はWindowsほど意味を持ちません。
 この場合、.cssはほとんど意味をもちません。そのURLは単に
http: HTTPプロトコルによる通信
//   インターネット
cdn-ak.b.st-hatena.com サーバー名
/css/common.css   パス情報とファイル名
?809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8  QUERY_STRINGS サーバーに与える情報

 受け手からはわかりませんが、
・/css はCGIプログラムで、/common.css は単なるPATH_INFO(パス情報)
・/css はディレクトリで、/common.cssは、プログラム
・/css/hoge.cgi などのプログラムがあり、/common.css は単なるPATH_INFO(パス情報)
 などが考えられます。

 そのプログラムが起動されたとき、PATH_INFOやQUERY_STRINGを利用して、スタイルシートを作成して、HTTP応答ヘッダにcontebt-type:text/css をつけて送り出せば、ブラウザは、その出力をスタイルシートと判断して処理します。

 私は、QUERY_STRINGでは気持ちが悪いので--個人的好みですが--PATH_INFOをよく使います。CSSというCGIを置いておいて、サーバーには/standerd.css などのPATH_INFOで動作をコントロールします。・・・ユーザーがスタイルシートを選択すると、それが標準スタイルシートとして出力させるとか・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。が、
僕のレベルが低いせいだと思いますが、2割くらいしか理解できません。

>Windows使いですね。

僕がですか? 僕は Mac ユーザーですが。

ただ、「QUERY_STRINGS」というキーワードを教わったので、
そこから何か知見が広がりそうな気がします。ありがとうございました。

お礼日時:2012/07/02 23:00

>僕のレベルが低いせいだと思いますが、2割くらいしか理解できません。



 809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8の値自体は、何かの意図があって利用しているのでしょう。

 googleで検索したとのことですが、QUERY_STRINGは、googleでも使っていて検索結果のURL欄に?に続いて、name=値&name=値&・・・・とありますね。QUERY_STRINGはURLに使われる文字--ASCIIに限られますから、エンコードされています。
 一方PATH_INFOのほうはwikiで使われていてwikiで検索すると/で区切られたデータが見えるはず・・

 Enviroment Variable and FORM,COOKIE ( http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi )でURLの後ろに、/やその後に?で区切って色々な英数文字を入れてみると・・・
[例]http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi/toast …

 まあ、サーバーに何らかの情報を伝えたい手段として、QUERY_STRING,PATH_INFO,標準入力などフォームを使う方法や、cookieなど様々な方法があるということです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2012/07/03 14:52

まず意図としては、ANo.1さんが回答されているようにキャッシュ対策だと思われます。



ある程度大きな企業などではインターネット回線の帯域節約などのためにプロキシサーバを導入していることが多いですが、(CSSやFlashなど)更新頻度の低いファイルであればあるほど長くキャッシュする(更新確認を行わない)仕様のプロキシサーバもあります。
一方、URL中に "?" から続くQUERY STRINGがある場合は、「ユーザサイドから可変データが送られるならば、サーバからの応答も可変だろう」という事で一般的にはキャッシュされません。
そういったところから、静的コンテンツであっても変更の即時反映が重要なコンテンツにはあえて "?ほにゃらら" を付け足すことがあります。

"?"以降のQUERY STRINGをどう扱うかはサーバ/アプリケーション側が決めることですので、何も定義していなければ何も影響ありません。普通のそのあたりにあるhtmlページに "~.html?hogehoge" と入れても全く同じページが出ます。


次に「809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8」という文字列ですが、使われている文字と桁数から見て SHA1ハッシュ値 ですね。
質問主さんの仰っているように年月日時分秒でも問題ありませんが、ハッシュを利用する事もユニークな文字列を作り出す簡単な方法のひとつです。
たとえば、「common.cssファイル自身のSHA1ハッシュ値をQUERY STRINGとして付与する」と決めておけばcommon.cssに少しでも修正が入ればSHA1ハッシュ値も全く別物に変わりますので運用としては楽だと思います。

あとは QUERY STRING はWebサーバのアクセスログに残るので、もしかすると何らかの統計などを取るためのキーワードなどをハッシュにしているのかもしれません。
※ハッシュは一方向関数のため、元の文字列/データは基本的に分かりません。
    • good
    • 0
この回答へのお礼

>更新頻度の低いファイルを長くキャッシュする仕様のプロキシサーバもあります。
>"?"以降のQUERY STRINGをどう扱うかはサーバ/アプリケーション側が決めること
>普通のhtmlページに "~.html?hogehoge" と入れても全く同じページが出ます。
>ハッシュを利用する事もユニークな文字列を作り出す簡単な方法のひとつです。

なるほど。完璧な解説、ありがとうございました。

お礼日時:2012/07/03 15:06

<!--[ANo.1 のお礼より引用]


しかしながら、
それだけの理由にしてはなんだかずいぶん念入りに無駄に長いこと(ユニークな文字列が必要なのであれば、
年月日時分秒でも足りるはず)と
[引用終わり]-->

セキュリティー上の理由。
想定可能だと面倒なことになるから。。。



<!--[ANo.1 のお礼より引用]
「?809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8%22」をググるといくつかヒットすることから、
[引用終わり]-->

『809c6b8b1eb6b9b83aa8a8b696d1848dbdabbcf8 -okwave』で検索すればわかるけど
同じコンテンツのコピーのようなきがするよ?
    • good
    • 0
この回答へのお礼

>同じコンテンツのコピーのようなきがするよ?

いや、質問を投稿する前に検索していくつかヒットしたんですが、今思うと夢でも見てたのかも知れません。

>セキュリティー上の理由。想定可能だと面倒なことになる

なるほど。ありがとうございました。

お礼日時:2012/07/03 15:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!