自分のサブドメインで自分のWebサイトのユーザーに公開Webサイトを提供する場合(例:bob.myapp.com
)自分の制御下で、メインアプリサーバーを危険にさらすことなく、任意のJavaScriptを実行することを許可できますか(例:myapp.com
)?ユーザーは自分の*.js
サブドメインのパブリックルートにあるファイル。
私は非常に JS Same Originポリシーの限られた理解を持っていますが、異なるサブドメインは異なるオリジンとしてカウントされると思います。したがって、私のメインアプリ(myapp.com
)はXSSなどから保護されていますが、他の外部ソースについて心配する必要のない、ユーザーのサブドメインから心配する必要がある具体的なものはありますか?
ありがとう!
はい、心配する必要があります。サブドメインは主にメインドメインから分離されていますが(same-Originポリシーのおかげで)、リスクをもたらす可能性のあるいくつかの例外があります。
1つのリスクはCookieに関係しています。 bob.myapp.com
のスクリプトは、myapp.com
のCookieを設定できます。このCookieは、ユーザーがmyapp.com
にアクセスしたときにmyapp.com
に送信されます。これはセッション固定攻撃に使用できます。
たとえば、悪意のあるユーザーコンテンツは、ドメインsessionid=1234
を使用してセッションCookie(myapp.com
)を設定できます。次に、ユーザーがmyapp.com
にアクセスすると、攻撃者が設定したセッションCookieがブラウザから送信されます。攻撃者はユーザーが使用するセッションIDを知っているため、攻撃者はセッションを乗っ取ることができます。
緩和策の1つは、アプリがalice.myappusercontent.com
にあるときにbob.myappusercontent.com
、myapp.com
などでユーザーコンテンツをホストすることです。それはこれらの攻撃を止めるはずです。
同じ起源のポリシーとWeb上の分離に関する情報の古典的なリファレンスは Browser Security Handbook です。特に same-Originポリシー および life- same-Originルール外 に関するセクションを参照してください。
私の理解では、同じ起源のポリシーはAJAX=ユーザーを相互に保護しますが、必ずしもメインサイトではありません。たとえば、user1.myapp.comはuser2にリクエストを投稿できません.myapp.com、ただしmyapp.comにリクエストを投稿できます。メインサイトで「www」サブドメイン(www.myapp.com)を使用し、リクエストをmyapp.comに転送することで、これを解決できます。
メインアプリのCookieを保護するためにできることがいくつかあります。すべてのCookieのドメインが特定のドメインにバインドされており、ワイルドカードが使用されていないことを確認してください(例:* .myapp.com)。それ以外の場合、サブドメインはそれらにアクセスできます。 HttpOnlyフラグを有効にして、ユーザーがJavaScriptを介してCookieを盗むのを防ぐことができます。ユーザーがサーバー側の言語を使用できる場合は、メインアプリケーションをサブドメインに配置します。そうでない場合、ユーザーはCookieにアクセスできます。 Secureフラグも有効にすることをお勧めします。
同じ起源のポリシー(およびその他の多くのWebアプリケーションセキュリティトピック)の詳細については、Michal Zalewskiの ブラウザセキュリティハンドブック または彼の本 The Tangled Web を参照してください。 。