如果我在我的网站上为我的网站上的用户在bob.myapp.com他们自己的控制下的子域(例如)上提供一个面向公众的网站,我是否可以允许他们执行任意 JavaScript 而不会使我的主应用服务器处于危险之中(例如myapp.com)?用户将能够将自己的*.js文件放在其子域的公共根目录中。
我对 JS 同源策略的理解极其有限,但我相信不同的子域算作不同的起源。因此,如果我的主应用程序myapp.com(
谢谢!
如果我在我的网站上为我的网站上的用户在bob.myapp.com他们自己的控制下的子域(例如)上提供一个面向公众的网站,我是否可以允许他们执行任意 JavaScript 而不会使我的主应用服务器处于危险之中(例如myapp.com)?用户将能够将自己的*.js文件放在其子域的公共根目录中。
我对 JS 同源策略的理解极其有限,但我相信不同的子域算作不同的起源。因此,如果我的主应用程序myapp.com(
谢谢!
是的,你确实需要担心。虽然子域大多与您的主域隔离(由于同源策略,但有一些例外情况可能会带来风险。
一种风险与 cookie 有关。上的脚本bob.myapp.com可以为myapp.com. 这个cookie会myapp.com在用户访问时发送myapp.com。这可用于会话固定攻击。
例如,恶意用户内容可以sessionid=1234使用 domain 设置会话 cookie ( ) myapp.com。然后当用户访问时myapp.com,他们的浏览器会发送攻击者设置的会话cookie。由于攻击者知道用户将使用的会话 ID,因此攻击者现在可以劫持他们的会话。
一种缓解措施是在您的应用程序打开时将用户内容托管在alice.myappusercontent.com,bob.myappusercontent.com等上myapp.com。这应该可以阻止这些攻击。
据我了解,同源策略将保护 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。