私のサイトでユーザーが送信したスクリプトを提供する必要があります(jsfiddleのようなものです)。スクリプトは、提供されているページから分離して、訪問者のブラウザーで安全に実行する必要があります。コードはユーザーによって送信されるため、信頼できるという保証はありません。
今、私は3つのオプションを考えることができます:
- ユーザーが送信したコンテンツを別のドメインのiframeで提供し、同一生成元ポリシーに依存します。これには、可能であれば避けたい追加のドメインを設定する必要があります。これがjsfiddleのやり方だと思います。スクリプトは
top.location.href
、たとえば変更するなど、まだある程度のダメージを与える可能性がありますが、これは理想的とは言えません。http://jsfiddle.net/PzkUw/ - サンドボックス属性を使用します。これはブラウザ間で十分にサポートされていないようです。
- スクリプトを提供する前に、スクリプトをサニタイズします。行きたくない。
他の解決策、または上記に関する推奨事項はありますか?
アップデート
私が思うに、最初のオプションが最善の解決策である場合、トップウィンドウの場所を変更する以外に悪意のあるスクリプトで何ができるでしょうか。また、これを防ぐにはどうすればよいですか。静的コード分析に基づいて特定のスクリプトを操作または拒否できますが、オブジェクトにアクセスできる方法の数と、一般にJavaScriptを静的に分析することの難しさを考えると、これは困難です。少なくとも、本格的なパーサーといくつかの複雑なルールが必要になります(JSLintに存在するものもありますが、すべてではないと思います)。