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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

Q&A

解決済

4回答

2449閲覧

DBから取り出したデータがエスケープする必要があるかどうか見分けるには

bws

総合スコア98

PHP

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

0グッド

1クリップ

投稿2018/12/04 10:31

編集2018/12/04 10:39

XSS対策について勉強していて疑問が湧いてきたのでご教授願います。

フォームから受け取ってすぐに表示する場合

イメージ説明

DBに登録後、取り出して表示する場合

イメージ説明

わかっていること

DB登録する前はエスケープせず、取り出して表示する時にエスケープする。

わからないこと

DBから取り出すデータがエスケープが必要かどうかどのようにして見分けるのでしょうか?
DBから取り出したデータは表示前にすべてエスケープすれば安心でしょうか?よろしくお願いします。

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

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

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

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

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

guest

回答4

0

基本的に外から受け取ったものはすべて汚染されているという前提でエスケープして表示します。
またDBから呼び出したものも何が収納されているかわからないので原則エスケープします。
逆に外から受け取ったものをDBに投入するときはなるべく生のデータのまま処理します

投稿2018/12/04 10:45

yambejp

総合スコア114777

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

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

bws

2018/12/05 02:23

モヤモヤがスッキリしました、シンプルな回答ありがとうございます!
guest

0

ベストアンサー

一般的には
・text/plain で保存して text/html で表示したい
という要件に従って実装するため、表示の際にエスケープ処理を行います。
*本質はXSS対策のためではありません。副次的に対策になるというのが正しいです。

稀に上記の要件以外の場面に出くわすので、何のために必要なのかを以下の記事を参考に理解すると良いです。

「何故htmlspecialcharsを通すのか?」を一言でどうぞ

投稿2018/12/04 12:09

編集2018/12/04 12:53
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

bws

2018/12/05 02:34

本質的なところを知ることができました。勉強させていただきます、ありがとうございます!
guest

0

DBから取り出すデータがエスケープが必要かどうかどのようにして見分けるのでしょうか?

原則全てエスケープすべきものですが、本来は「設計」によるものです。
中にはhtmlタグの入力をOKとして登録するコンテンツもなくはないです。
でもそれは「このタグを使っている」という制限をするなどして何かしらの対応はしているものです。
そういうものについてはそのタグに限ってはエスケープしないように対応することもないわけではないです。
(できれば置換しておいて全体エスケープ後に戻すなどの対応が望ましい)

つまり、「見分ける」と仰っている時点で「何が入っているかわからない」前提なので
考えるまでもなくエスケープしてください。

投稿2018/12/04 11:18

m.ts10806

総合スコア80850

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

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

bws

2018/12/05 02:25

何が入っているかわからないものはエスケープと覚えておけば困らなそうです!ありがとうございます!
m.ts10806

2018/12/05 02:27

あくまで「設計」ありきですよ。 入っているデータの方向性くらいはデータを入れる前にある程度制御すべきですし、開発者側が把握できていない、何も制御されていないシステムはボロボロです。
guest

0

考え方としては、
何らかのデータをブラウザ上に表示する時は常にhtmlエスケープする。
例外としてそのデータをhtmlとして評価させたい場合のみエスケープしない
です。

出力先がDBやCSV等に変わってもエスケープ方法が変わるだけで考え方は同じです。

投稿2018/12/04 12:39

tanat

総合スコア18713

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

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

bws

2018/12/05 02:30

DBから取り出したデータはすべてエスケープで安心できそうです。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問