有没有办法禁用跨域ajax请求?
假设有两个域: mywebsite.com 和 hackerswebsite.com 。在 mywebsite.com 上有一个网站,其中包含带有AJAX功能的javascript,可将数据发送到 hackerswebsite.com 。我想要的只是阻止这一点,并且只允许向 mywebsite.com 域发送AJAX请求。
我知道有类似“同源政策”的内容但据我所知,它可以在第二个域上运行,并且可以阻止来自其他域的连接。
更确切地说,假设我有一个用户可以运行自己的javascript的网站。如果他们可以编写自己的脚本,他们可以从DOM文档中获取任何数据并将其异步发送到他们自己的服务器,该服务器将接受来自我的域的数据。例如登录名。我是对的吗?
如果我错了,请纠正我。我只是想了解这个安全政策的事情。
答案 0 :(得分:3)
听起来您希望content security policy(CSP)限制页面可以使用和不能使用的资源和Ajax目标。
同源策略旨在防止网站读取来自第三方的凭据响应(例如,我加载evil.com
,并且该网站指示我的浏览器使用我的bank.com
cookie获取我的在线银行对帐单。 SOP not 旨在阻止用户或网站发送数据。
如果出现以下情况,网站的CSP旨在将资源列入白名单:
要清楚,#2中的危险不是用户可以运行他自己的自己的 JavaScript,而是用户可能运行某些其他用户的脚本。 / p>
示例CSP可能是:
Content-Security-Policy: default-src 'self'; frame-src 'none'; object-src 'none';
这将阻止任何加载iframe或插件的尝试,并将所有其他资源加载(包括图像,脚本,样式表和Ajax请求)限制为当前源。如果您想允许插件或iframe,您可以删除其中一个或那些指令,它们将回退到default-src
指令。您可以使用connect-src
指令专门限制Ajax。
另请注意,如果您允许用户运行任意脚本,您可能仍会遇到严重问题(例如,重写具有误导性内容的页面),即使是非常严格的CSP负责跨域网络请求。