首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DNS欺骗绕过同源策略

使用DNS欺骗绕过同源策略
EN

Stack Overflow用户
提问于 2013-07-01 01:17:58
回答 1查看 413关注 0票数 1

我正在用Javascript编写一个web应用程序,它需要访问第三方应用程序接口(位于x.apisite.comy.apisite.com上)。我正在使用XMLHTTPRequest,但当从我自己的本地服务器提供文件时,由于同源策略而失败。

现在,这个web应用程序应该安装在我的移动设备上,任何下载的文件都将被缓存。因此,我更改了DNS条目,使x.apisite.comy.apisite.com指向我自己的本地服务器。然后我下载这些文件,然后将DNS条目改回正确的条目。我认为既然浏览器认为脚本是从*.apisite.com下载的,我现在就可以将XMLHTTPRequests设置为*.apisite.com。然而,情况似乎并非如此,我仍然收到同源策略错误。

我做错了什么?

这是我正在做的事情的基本想法:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <!-- this will actually be downloaded from my own local server -->
        <script src="http://x.apisite.com/script-0.js">
        <script src="http://y.apisite.com/script-1.js">
...

script-0.js中,我创建到x.apisite.comXMLHTTPRequest,同样在script-1.js中,我访问y.apisite.com

EN

回答 1

Stack Overflow用户

发布于 2013-07-29 20:49:16

实用答案(不推荐):从您控制的域创建到第三方域的CNAME记录,然后使用这些域,并希望第三方的主机不会查看HTTP Host标头。请注意,如果客户端尝试对第三方主机进行身份验证,这也不会起作用;例如,当使用HTTPS时(某些客户端浏览器在某些情况下可能会强制使用HTTPS )。

理想的答案:让第三方授权来自您的源域的代码使用CORS发出的请求(有些主机已经允许来自任何来源的代码的请求,您应该检查这一点)。

替代方案:如果第三方不想让客户端使用您的域中的代码发出跨域请求,那么您必须自己(从您的服务器)发出这些请求。然后,您发送到客户端浏览器的代码将只与同一来源交互,但这也意味着,如果您要代理用户的请求(如果这是相关的),则用户必须信任您的凭据,或者您必须拥有自己的凭据才能向第三方主机验证您的服务器,第三方主机允许您在那里做任何您想做的事情。这也意味着你也要承担流量负载,这可能会很重,也可能不会很重,这取决于应用程序。可能还有许多其他的含义,这些都源于您显式地为这些请求承担责任的事实。

注意:虽然这听起来可能有点复杂,但理解用户、用户的客户端浏览器、在浏览器中执行的代码、代码的来源以及代码向其发出请求的域之间的信任机制可能会很有用。时刻牢记每一方的最大利益,这样就很容易为你的具体问题找到解决方案。

最后的答案(每个人都讨厌它,但你可能已经预料到了):“这取决于你到底想做什么。”(对不起。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17392883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档