質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

3176閲覧

session.cookie_secureとsession.cookie_httponly について

Maasa

総合スコア14

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/09/29 08:42

あるサイトにて、セキュリティ設定を行うために、「.htaccess」にて以下の設定を行いました。

【施した設定】
php_flag session.cookie_secure On
php_flag session.cookie_httponly On

クロームにて、ヘッダーを確認すると以下のとおりになっておりました。

【Response Headers】
Set-Cookie:PHPSESSID=s8fecieplcb7snku9vd3kmpsv7; path=/; secure; HttpOnly

恐らく「secure」「HttpOnly」が付与されているので、問題ないかと思います。

ここからが、質問なのですが
【Requset Headers】
Cookie:AMCVS_D97123FB592BE4310A495DEF%40AdobeOrg=1; PHPSESSID=5qm81e9p8bct8jr8eh4bub5fj5; AMCV_D97123FB592BE4310A495DEF%40AdobeOrg=102365995%7CMCIDTS%7C17439%7CMCMID%7C13835872389594888339130894004617875991%7CMCAID%7CNONE%7CMCOPTOUT-1506678282s%7CNONE%7CvVersion%7C2.2.0%7CMCAAMLH-1507267954%7C11%7CMCAAMB-1507275882%7Chmk_Lq6TPIBMW925SPhw3Q%7CMCSYNCSOP%7C411-17446; s_nr=1506672582673-Repeat; s_cc=true

となっており、「secure」「HttpOnly」が付与されているかが、分かりません。
どうなっていれば、secureおよびHttpOnly属性が付与されていると判断すればよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Google Chrome等の開発者ツールを使えば容易に、かつ、確実にわかります。
開発者ツールを起動するには、F12を押すか、Shift-Ctrl-i を押します。
その状態で、下図のように、上段のApplicationタブを選択し、左側ペインのCookiesから当該のドメインを選択します。クッキーごとにHTTP OnlyやSecureその他の属性が表示されます。下図では、赤い枠で囲った部分が該当します。

イメージ説明

投稿2017/09/29 09:46

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Maasa

2017/09/29 10:17

ockeghem 様 ご回答ありがとうございます。 僕も調べて、この画面を見て「PHPSESSID」の部分をチェックしたのですが HTTPとSecureの欄にはチェックがついておりませんでした。 ちなみにチェックしているサイトは、本番環境と開発環境の2つがあります。 質問の時点で情報不足で申し訳ございません。 ・本番環境はhttps://〜 or http://〜(httpsとhttp共に閲覧可能な状態) ・開発環境はhttp://〜 でコンソールのステータスの状態は 開発環境のPHPSESSID、HTTPとSecureの欄にはチェックない。 本番環境のPHPSESSID、HTTPとSecureの欄にはチェックあり。 今回相談したサイトは、開発環境になります。 そもそもSSL化になってないので、チェックが入らないものなのでしょうか? あと大変恐縮ですがもう2点、教えていただけますと幸いです。 ================================ クライアント          サーバー 受信←←←←←←←←←←←←←←送信 ================================ この場合は、HttpOnly、Secure属性が付加される。 ================================ クライアント          サーバー 受信→→→→→→→→→→→→→→送信 ================================ この場合は、HttpOnly、Secure属性が付加されない。 HttpOnlyは、JavaScript等からの該当Cookie参照を許可しないという指定なので そもそも指定されるものではない。 と認識しているのですが間違ってないでしょうか? 上記の認識で問題ない場合、 クライアントから、サーバーへリクエストする際は、 基本的にセキュリティ対策できないものなのでしょうか? 的はずれな質問だったら、申し訳ございません。
ockeghem

2017/09/29 11:58

クッキーは、サーバーからSet-Cookieヘッダによりブラウザに送られ、ブラウザ側で保存します。その保存の際にクッキーの属性もセットで保存されます。クッキーがブラウザからサーバーに送られる際には、名前=値だけが必要なので、属性値はついていきません。 path / domain / expires / secure の各属性は、ブラウザからサーバーに送るか否かを決める属性ですので、サーバー側からみれば、クッキーが送られてきたということは、送られてくる条件を満たしているということが分かるので属性までは送っていないのだと思います。しかし、サーバーから見れば、本当は送ってくれた方が便利な面もあります。というのは、domainやpathの属性が違えば同名のクッキーを複数保存でき、送信も複数されるのですが、サーバーからみると属性がないので、どのクッキーがどのdomain / pathなのか分からないので不便です。この辺、なぜこのような仕様になっているかは、仕様を決めた人に聞かないと分からないので、とにかくこのような仕様だと覚えるしかありません。 HttpOnlyは、JavaScriptから参照できるか否かを指定するものであり、HttpOnlyの有無はサーバーへの送信には関係ないので送られません。また、そもそもサーバー側ではどのクッキーをどの属性で送っているかは把握しているはずなので送る必要がないという見方もできます。 さて、httpsではなくhttpでSecure属性つきのクッキーを送っても、そのクッキーは保存されないはずです。もし、httpの状態でクッキーがあるとすれば、それはSecure属性を指定する前のものが残っているのではないでしようか? 一度クッキーを削除し、削除されていることを確認してから実験したほうがよいと思います。
guest

0

ベストアンサー

Cookieのsecurehttponlyは、あくまでサーバからクライアントへの指示なので、Set-Cookie:にしかなく、クライアントが送るCookie:には存在しません。

RFC 6265の和訳

投稿2017/09/29 09:08

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Maasa

2017/09/29 09:11

maisumakun 様 ご回答ありがとうございます。 非常に勉強になりました!ありがとうございます。
guest

0

そのサイトにHTTPでアクセスした場合にPHPSESSIDがCookie送信がされなければsecure属性が有効となっていることがわかります。

ブラウザのアドレスバーに下記を入力するか、開発者ツールのコンソールでdocument.cookieの内容を確認してPHPSESSIDがなければ、HttpOnlyが有効となっていることがわかるかと思います。

javascript:alert(document.cookie);

投稿2017/09/29 08:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Maasa

2017/09/29 09:00

suyama 様 ご回答ありがとうございます。 1点教えていただきたいのですが、今回のRequest Headersを見ると PHPSESSID=5qm81e9〜〜 となっております。 つまり、HttpOnlyが無効という認識でよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2017/09/29 09:15 編集

HttpOnlyはJavaScript等からの該当Cookie参照を許可しないという指定なので、リクエストヘッダからは判断できません。 回答の方法以外に、実際に保存されたCookieを確認するという方法もあるかとは思います。
Maasa

2017/09/29 09:26

suyama 様 度々ご回答ありがとうございます! なるほどですね!言われてみると納得できます。大変助かりました!ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/09/29 09:33

> そのサイトにHTTPでアクセスした場合にPHPSESSIDがCookie送信がされなければsecure属性が有効となっていることがわかります。 これ、何らかの制御をしない限り、secure 属性付きの cookie が送られませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問