PHPでwebアプリを開発しているのですが、
http_build_queryを使用してGETパラメータつけたURLでリンクを表示させようとした時に、http_build_queryでURLエンコードされると思うのですが、
URLエンコードでXSSは回避できるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
「http_build_queryを使用してGETパラメータつけたURLでリンクを表示」という表現があいまいですが、Aタグを生成することを「表示」としているのであれば、一応の対策にはなります(後述の理由でお勧めはしません)。一方、そのリンクから遷移した先であれば、XSS対策にはなりません。Takumibooさんの指摘は後者を想定してのことだと思います。
ただし、「一応の対策」と書きましたのは、A=B&C=D となった場合の &記号は、HTMLエスケープが必要な文字ですので、これを&とエスケープする必要があります。PHPのマニュアルの例では、セパレータを「&」と指定する方法が掲載されていますが、そのような分かりにくい方法を取るのではなく、単にhttp_build_queryの結果をhtmlspecialcharsする方が簡便です。
表示箇所によって、htmlspecialcharsしたり・しなかったりすると、本当はhtmlspecialcharsが必要なのに漏れてしまう原因になりますし、後から見直す時にhtmlspecialcharsが必要か否かを一々考える必要があります。そんな無駄なことはせずに、統一的にhtmlspecialcharsした方が安全で、メンテナンスまで含めれば結局安上がりです。
投稿2020/10/06 14:46
総合スコア11705
0
どういう状況を想定しているのか分かりませんが、いくらWebアプリ側でURLを生成して表示しようが、アクセスする際にそのURLに細工をされたら無意味なので、XSS対策としては適切ではないでしょう。
ユーザーからの入力データを出力する機能があるのであれば、htmlspecialchars()等でHTML出力時に適切なエスケープを施す必要があるでしょう。
投稿2020/10/06 13:56
総合スコア2536
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/06 14:04
2020/10/06 14:09
2020/10/06 16:23
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/07 01:25