来自AWS S3的iframe的相同原点问题

时间:2013-09-22 17:40:30

标签: django amazon-web-services amazon-s3 cross-domain same-origin-policy

我刚刚将自己的博客从wordpress改为django-zinnia。百日草在django-admin中使用WYMeditor(https://github.com/wymeditor/wymeditor)iframe用于博客文章和内容输入,而现在由于同源问题我无法访问iframe。我在浏览器控制台中看到的错误是:

Blocked a frame with origin "http://www.mydomain.com" from accessing a frame with origin "http://mybucket.s3.amazonaws.com". 
Protocols, domains, and ports must match.
WYMeditor.WymClassSafari.initIframe 
onload

我可以在我的CORS配置中为存储桶更新参数以允许iframe加载交叉源吗?我已经

 <AllowedOrigin>http://www.mydomain.com</AllowedOrigin> 

在我目前的CORS规则中:

<?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
         <CORSRule>
             <AllowedOrigin>http://mydomain.herokuapp.com</AllowedOrigin>
             <AllowedOrigin>http://mydomain.com</AllowedOrigin>
             <AllowedOrigin>http://www.mydomain.com</AllowedOrigin>
             <AllowedMethod>GET</AllowedMethod>
             <MaxAgeSeconds>3000</MaxAgeSeconds>
             <AllowedHeader>Content-*</AllowedHeader>
             <AllowedHeader>Host</AllowedHeader>
             <AllowedHeader>Authorization</AllowedHeader>
        </CORSRule>
   </CORSConfiguration>

1 个答案:

答案 0 :(得分:5)

CORS标头不会影响Safari中iframe的同源策略。

您可以使用postMessage在框架之间进行通信,也可以将mydomain.com中的子域附加到S3存储桶,并通过设置document.domain来放宽同源策略(此方法仅适用要在同一个域的子域之间进行通信,它在不同的域之间不起作用。)

您可以在StackOverflow上从此答案中了解有关iframes通信的更多信息:

Ways to circumvent the same-origin policy