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

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

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

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

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

意見交換

クローズ

3回答

838閲覧

hrefにディレクトリ相対パスを指定できる場合のXSS対策

TaiMi

総合スコア0

セキュリティー

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

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

0グッド

1クリップ

投稿2023/06/29 08:42

編集2023/06/30 01:08

0

1

テーマ、知りたいこと

aタグのhref属性値に対してXSS対策を検討するとき、特殊文字のエスケープに加えて「"http://"もしくは"https://"から始まっていることを確認する」というのが一般的に言われていると思います。
ただこのhref属性、http以外にも種々のリンクに対応しているはずですが、その中でも相対パスを指定するようなものを実装する場合、どういうバリデーションを組むのが一番いいでしょうか。

例えば該当ページと同じ階層にあるほかのファイルへの相対パスをユーザーが指定することを許可するようなページの場合、
「"./"から始まる入力値であることをバリデーションする」
という仕様が一番丸いのかなぁと足りない脳みそで考えてます。 (ディレクトリトラバーサル対策は別途必要ですが)

ファイルの相対パスをリンクとして指定できるような場合のXSS対策のバリデーションで一番妥当 (という表現が正しいか分かりませんが) な案って何になるかをお聞きしたいです。

背景、状況

私自身の理解の深化も兼ねて、社内アプリケーション開発者向けにXSS対策についての資料を作成しようとしています。開発者視点で一定納得感のあるXSS対策をまとめて共有したいと考えているところです。

追記

聞きたいことがぼんやりとしておりすみません。
実際には特に相対パスを指定しなければならない仕様に迫られているわけではなく、XSSについての勉強の中で、「相対パスをhrefに指定することを許可する場合には、XSS対策としてどういうバリデーションを実装するのが適切なのか」という質問があったので本質問を投稿しました。

URLを許可する場合のような、明確な対策方法が存在していない・そもそも相対パスを許可するケースがあまり考えづらいという話なのだろうと想像しますが、皆さんならどうするかレベルでお聞きできればと思っております。(重箱の隅をつつくような話かもしれませんが、よろしくお願いします)

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

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

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

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

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

回答3

#1

yambejp

総合スコア114843

投稿2023/06/29 10:45

HTMLを動的に挿入する仕組みなのでしょうか?
いまいち何を気にされているのか伝わってこないですが

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

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

#2

maisumakun

総合スコア145184

投稿2023/06/29 10:56

そもそも論にはなってしまいますが、動的に作られるサイト内で、真に./を必要とするような相対パスが有用という場面が想像しづらいです。

表示する側のページのURLが変化すれば、全部のリンクが切れてしまうことにもなります。

パスが極端に長いとか、リンクするページとされるページが相対パスでの関係を維持したまま絶対パスとしては変化するとか、そういう特殊な環境でもない限り、内部パスは/始まりの絶対パスを強制したほうが適切と判断します。

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

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

#3

maisumakun

総合スコア145184

投稿2023/06/30 01:23

RFC 3986参考和訳)によれば、スキームを含むURIについて、

スキーム名は、文字(引用者注:a~z、A~Zの52文字)で始まり、その後に文字、数字、プラス("+")、ピリオド ("."), ハイフン ("-") を繋げたものから成る。

とのことですので、「このパターンにコロンが続く」というもの以外(典型的には、コロンが一切ない、あるいはスラッシュのほうがコロンより先にくるもの)は文書と同じスキームとして処理される(少なくともXSSとはならない)と考えます。


もっとも、ただのリンクですら精神的ブラクラなどの被害を生んだりすることがありえますので、自由に入力させてXSSだけを考えればいいわけではまったくないことには要注意です。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問