web-dev-qa-db-ja.com

iframeのソースはユーザー入力に対して安全ですか?

<iframe sandbox="allow-scripts allow-same-Origin"
  src="javascript:alert(1)">

srciframe属性がユーザー入力に対して安全かどうかを知りたいのですが。私は この質問 を見つけましたが、私が疑問に思ったのは、回答で提供されたコードを試したところ、sandbox="allow-scripts allow-same-Origin"属性。

ユーザーが動画を投稿できるようにしています。ユーザーがバックエンドにリンクを投稿すると、metaタグの正しい値を取得するためにgetリクエストが行われます。ただし、OPがwww.my-site-with-fake-meta-tag.comへのリンクを投稿して面白いことをしようとするのを止めるものは何もありません。

だから私はいくつかのドメインをホワイトリストに載せることができましたが、それは面倒なプロセスです。チェックしたすべてのサイトの他に、ユーザーが送信したコンテンツにiframe srcを使用しています。

1
Ced

いいえ、ユーザー指定の_<iframe src=...>_は安全ではありません。

sandboxプロパティがモーダルダイアログ(アラートボックス)を自動的にブロックするため、例のalert()は起動しません。しかし、_allow-scripts_を設定したので、JSコードは引き続きバックグラウンドで実行されます。また、_allow-same-Origin_が設定されているため、埋め込みページと同じドメインで実行されます。これらの設定を一緒に使用すると、サンドボックスに完全な特権が与えられるため、サンドボックス属性が役に立たなくなります。

概念実証として、別の関数を使用してください。 document.write()

_<iframe sandbox="allow-scripts allow-same-Origin" src="javascript:document.write(document.domain)">
_

または、_allow-modals_ディレクティブを追加します(興味深いことに、現在ドキュメント化されていません)。

_<iframe sandbox="allow-scripts allow-same-Origin allow-modals" src="javascript:alert(1)">
_

_javascript:_スキームの代わりに、攻撃者が_data:_ URIを挿入する可能性があることに注意してください:

_<iframe sandbox="allow-scripts allow-same-Origin allow-modals" src="data:text/html,<script>alert(1)</script>">
_

埋め込みページに最小限の権限を与えることを計画している場合は、サンドボックス属性を空のままにしておくことができます。

_<iframe sandbox src="...">
_
2
Arminius