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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

851閲覧

PHPのheader()によるセキュリティ対策

gsuisk

総合スコア72

セキュリティー

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

4クリップ

投稿2017/11/30 15:40

入門書などで、セキュリティ対策として以下のようなheaderを冒頭に書いてあるのを見ます。

PHP

1//レスポンスの文字エンコーディングを指定 2header('Content-Type: text/html; charset=UTF-8'); 3//クリックジャッキング対策 4header('X-FRAME-OPTIONS', 'SAMEORIGIN');

またはクリックジャッキング対策としてHTMLに記述。

HTML

1<meta http-equiv="X-FRAME-OPTIONS" content="SAMEORIGIN">

これらは基本的にどのPHPファイル(HTMLを返しutf-8である前提)に書いておいても問題はないですか?保険的なセキュリティ対策として有効でしょうか?

また、他にheader()等で保険的にセキュリティ対策できるものがあれば教えていただきたいです。

よろしくお願いします。

umyu👍を押しています

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

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

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

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

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

gsuisk

2017/12/01 15:39

そうなんですね。教えていただきありがとうございます。
guest

回答4

0

ベストアンサー

Content-Typeに文字エンコーディング指定も大切ですが、結果としてセキュリティにも利いてくるということであって、元々はコンテンツの文字エンコーディングを明示することにより、文字化けなくコンテンツが表示できるようにするということですね。
以下は、セキュリティが主目的のレスポンスヘッダで、かつ、指定することによる悪影響があまりないものです。これらは、Apacheやnginxの設定により必ず出力しておくとよいでしょう。最近の脆弱性診断ツールは、これらがないことだけで、脆弱性指摘するものが増えてきました。

HTTP

1X-Frame-Options: SAMEORIGIN 2X-Content-Type-Options: nosniff 3X-XSS-Protection: 1; mode=block

metaタグによるx-frame-options指定は、コメントにあるようにまったく無意味です。古いバージョンのGoogle Chromeでは有効でしたが、Google Chromeも最近のバージョンではmetaタグによるx-frame-optionsは無視します。

これらは基本的にどのPHPファイル(HTMLを返しutf-8である前提)に書いておいても問題はないですか?

はい。しかし、前述のように、Apacheやnginxの設定で出した方が簡単で、漏れる心配もありません。

保険的なセキュリティ対策として有効でしょうか?

はい。
厳密に言うと、x-frame-optionsはクリックジャッキングの根本的解決策であって、保険的なものではありません…が、「保険的以上の意味がある」ということですね。他の2つはXSSに対する保険的対策ですが、XSS対策はきちんと実施することが前提です。レスポンスヘッダだけでXSSが防げるわけではありません。

投稿2017/12/01 07:45

ockeghem

総合スコア11701

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

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

gsuisk

2017/12/01 15:37

Apacheを使用しているのでhttpd.confで対策を施すのがベストなのですね。念のためサーバーの設定とphpファイルの両方でレスポンスヘッダを設定しておこうと思います。 その他のレスポンスヘッダも参考になりました。 ありがとうございました。
guest

0

どのような意味を持つものかを理解したうえで利用されるのであれば、
全てのHTML出力にヘッダとして付与することは問題ないものと思います。
その場合、ApacheやNginx等でヘッダを付与したほうが漏れが無く確実です。
いちいちPHPに書く必要はありません。

他に付与を検討するヘッダーとしては、X-XSS-Protectionなどが考えられます。

投稿2017/11/30 22:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gsuisk

2017/12/01 15:31

サーバーの設定で対策するのが良いのですね。 ありがとうございます。
guest

0

面白そうだったので調べてみました。
F5 のサイトに良さげなまとめが^^
セキュリティを強化する7つの便利なHTTPヘッダ

php でページを作るのであれば、フレーム表示は考慮しなくて良い気がします。
その場合 X-Frame-Options は DENY で。

投稿2017/12/01 14:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gsuisk

2017/12/01 15:39

ヘッダがまとめてあるサイトを教えていただきありがとうございます。 是非参考にさせていただきます。
guest

0

phpでの対応→php出力のみ対象。
ApacheやNginx等での対応→php以外の静的コンテンツ(html,js,css,その他)も含めて対象。
という違い。

投稿2017/12/01 01:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問