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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1996閲覧

XSS対策における & の無害化の意味 

jun_i

総合スコア14

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2016/06/27 10:26

お世話になります。

ものすごい初歩的な質問かも知れないのですが、調べても分からなかったため質問させていただきます。

XSS対策で < > " ' & を無害化しなければいけないというのは、よく知られていることだと思います。

この内、
< と > はタグ文字を無害化するということで分かります。
" と ' は不正なイベントハンドラ等を入れられないようにということで分かります。

しかし、&はどういった例のXSSを引き起こされるかが分かりませんでした。

分かる方がいればご教授いただければと思います。

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

&は、<のエスケープを行う際に使う文字なので、 &の文字自体を&とエスケープしないと
&という文字が&(という表示)になってしまうためということです。 < の文字について処置する理由とは違います。

投稿2016/06/27 10:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

jun_i

2016/06/28 01:54

ご回答いただきありがとうございます。 すみません、知識不足のせいなのか理解ができていないのですが、 < をエスケープするには&lt;としますよね。 この&lt;の&もエスケープしないといけないということでしょうか? そうするとhtml上では&amp;lt;となり、ブラウザ上では&lt;と表示されます。 あくまでブラウザ上では < を < という文字として表示したいだけであれば、&lt;とエスケープするだけでよいと思います。 ・・・なにか見当違いなことを言っていますでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/28 02:06

&lt;は変換後じゃないですか。2回やっちゃだめですよ。 ブラウザ上で &lt; と表示したい場合どうするの で分かりますでしょうか? エスケープされている表記を表示する形に変換する際のルール上で、識別子である&にもルールが必要なのです。
退会済みユーザー

退会済みユーザー

2016/06/28 02:11

”XSS対策のために&もエスケープしなさい” は間違いです。
jun_i

2016/06/28 02:31

ご返信ありがとうございます。 >&lt;は変換後じゃないですか。2回やっちゃだめですよ。 そうですよね。意味不明だと自分でも思っていました。 >ブラウザ上で &lt; と表示したい場合どうするの で分かりますでしょうか? はい。分かりました。&を&という文字として表示させたければ&amp;にしなさいという意味ですね。 >”XSS対策のために&もエスケープしなさい” は間違いです。 やはりXSS対策とは直接関係はないのですね。これですっきりしました。
guest

0

ベストアンサー

それはXSS対策で『無害化』をしているのではなく、HTML のルールに則った『変換』を行うためです。

HTML にテキストとしての & を記述する場合は &amp; としなければならないルールがあります。

投稿2016/06/27 10:48

ngyuki

総合スコア4514

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

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

jun_i

2016/06/28 02:07

ご回答いただきありがとうございます。 はい。HTMLとして正しく表示させるというのが元々本来の意味だとは思いますが、それが結果的にXSSを無害化するということにもなっているのではないでしょうか? 私が知りたいのは & を記述するのに &amp;としなかった場合、どのようなXSSが起こりえるかのかということです。 XSSに間する記事にはよく&もエスケープしなさいと書いてあるので・・・。 もしかして、< > " ' と違い、&に関しては正しく表示をさせるためにエスケープをするのであり、XSSとは関係がないということをngyuki様は仰っているのでしょうか?
ngyuki

2016/06/28 02:30

はい、本来の目的は正しい HTML を出力することであって、それが結果的に XSS 対策になるだけです。 質問からそれを理解されていないように感じたのでそのように回答しました。ただ、コメントを見るに理解されているような気がするのでわたしの回答にはあまり意味が無いです。
ngyuki

2016/06/28 02:31

「< > " '」などの文字を実体参照へ変換するのも、XSS 対策が本来の目的ではなく正しく HTML を出力するためです。 例えばこのサイトで <br> という文字を入力したとき、これを表示するためには &lt;br&gt; と変換する必要があります。変換しなければ改行になってしまいますので。 また、このサイトで &lt; という文字を入力したとき、これを表示するためには &amp;&lt; と変換する必要があります。変換しなければ < と表示されてしまいますので。 & を &amp; に変換する必要があるのは、HTML で実体参照のためのメタ文字として & が使用されているからです。そのため、そのまま & を記述すると実体参照として解釈される可能性があります。なので & を HTML で記述するために &amp; という実体参照があります。
ngyuki

2016/06/28 02:34

質問の内容は上記のようなことを踏まえた上で & を &amp; に変換しなかったとしてどのような XSS が考えられるか、ということだったのかもしれませんが。。。すみません、思いつきません。 > XSSに間する記事にはよく&もエスケープしなさいと書いてあるので・・・。 これはおそらく「XSSを防止する最善の解は正しい HTML を出力すること」→「正しい HTML を出力するためには < > " ' & を実態参照へ置き換える」→「& も変換しなさい」ということだと思います。 (実際には文脈によって変換すべき文字は代わりますけれども)
jun_i

2016/06/28 02:39

丁寧な解説をいただきありがとうございました。 とてもよく理解できました。
guest

0

&はHTMLのエスケープに使用したり、Getメソッドでの引数追加に使用したりするため、意図しない変換結果になったり、意図しない引数付きの要求が来たりするためだと思います。
特に後者はそこからSQLインジェクションや、バッファオーバーフローなどを引き起こす可能性が出てきますので。

投稿2016/06/27 10:43

shanxia

総合スコア1038

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

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

jun_i

2016/06/28 02:23

ご回答いただきありがとうございます。 申し訳ありません、noricyan2様の方でも同じようなことをコメントさせていただいているのですが、 >&はHTMLのエスケープに使用したり という部分の具体的なところが理解できていません。 >Getメソッドでの引数追加に使用したりするため、意図しない変換結果になったり、意図しない引数付きの要求が来たりするためだと思います。 これに関しては、パラメータを受け取るスクリプトの作り次第ではあり得そうですね。 また、最初に回答していただきましたのに、コメントの返答が最後になり大変失礼いたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問