我正在编写此JavaScript,该JavaScript将在其他几个域上使用,该域调用PHP脚本(仅在我的域上)返回数组.我正在使用XMLHTTP,并且在我的域进行测试时效果很好,但是一旦将JavaScript放置或从单独的域中调用或调用,它就会完全断裂.有人知道如何使此请求交叉域? 注意:我必须执行一个奇怪的小骇客,以便我拨打两个单独的电话,并确保它们都在处理前返回.无论如何,这确实每次都在我的域上工作. 这是javascript文件,该文件调用我的php代码 function getUrls(){ if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); xmlhttp2 = new XMLHttpRequest(); } else { // code for IE5 and
以下是关于 same-origin-policy 的编程技术问答
作为许多其他人,我遇到了我们正在调用的恢复服务的问题. 此服务,因为许多其他服务都具有原点检查.使用Cordova&ionic执行来自Android应用程序的请求,将Origin设置为File://这对浏览器CORS检查有益,但对服务不利,它们不允许使用此架构来源.作为其他人,只允许空的原点或相同的来源. 在许多帖子中,我读了写作,您可以使用白名单插件或CSP处理此内容.但是我认为这绝对是不正确的.使用白名单,您无法在原始标题上工作,并且CSP与它无关. 因此,在过去的几天里,我花了数百个小时,并搜索了不同的解决方案和不同的插件.但是解决方案不存在,也不简单. 目前,我正在测试HTTP和WebSocket请求的Cordova插件,要进行本机HTTP和WebSocket呼叫,这对SOP问题非常有用,但是Cookie存在一些问题. 我尝试在自定义的WebView上找到一个解决方案,我们可以从请求中消除原始标题,但这对我们来说很难. 有人可以在这个问题上提供帮助吗
我想访问我可以轻松识别的另一个HTML元素中的脚本的内容.我试图通过获得父母然后寻找孩子来找到元素,但我无法做到. 因此,我只是尝试使用Firefox中的控制台并使用该元素来读取内容,但我无法做到.看起来像这样: 当我尝试使用该元素做任何事情时,我会得到以下页面的链接,并且错误: Permission denied to access property. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Property_access_denied?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default 无法访问该对象进行硒自动测试? 解决方案 此错误消息... Permission denied to access property. https://developer.
我正在从事一个自动化项目,并且正在尝试从网站下载PDF.该网站仅包含PDF,但网页的文件类型为HTML. PDF使用pdf.js显示,并且PDF.JS查看器也在iframe中. 当我尝试使用浏览器JavaScript单击该元素时,我返回了与跨站点脚本有关的安全错误. SecurityError: Permission denied to access property "document" on cross-origin object 我想从我的脚本下载pdf,使用硒写成python.当我尝试一下时: driver.find_element_by_id('download').click() 没有产生结果,即使我将重点切换到硒中的iframe. ,下载按钮也不会单击. 有人知道解决方案如何下载PDF吗? 解决方案 要单击要诱导的元素 webdriverwait 对于element_to_be_clickable(),您可以使用以下任何一个策略:
我正在开发一个可构成的组件,现在偶然发现了看起来像安全问题的东西. 我有两个网站: 网站A,在http://localhost上运行:3002 网站B,在http://localhost上运行:3000 站点A将站点B嵌入iframe中.网站B需要使用的数据,该数据应该由站点A提供.但是,现在,网站B仅通过URL接受数据,并且由于原始URL可能需要身份验证,因此网站A获取数据,并转换为对象URL (使用URL.createObjectURL),然后通过postMessage提供到网站B.网站B现在应该从该URL中获取数据并使用它. 但是,浏览器会阻止对象URL获取对象URL: chrome:Not allowed to load local resource: blob:http://localhost:3002/ firefox:Security Error: Content at http://localhost:3000/... may
我正在https://localhost:3000上运行柏树测试,这也是我的CYPRESS_BASE_URL.导航到/内部/en的重定向,效果很好.但是我正在写的测试是关于构建新URL的形式,例如https://localhost:3000/foobar?param=value.这项工作找到了,我什至可以看到我正在重定向的页面.但是柏树抱怨这一点: Cypress detected a cross origin error happened on page load: > Blocked a frame with origin "https://localhost:3000" from accessing a cross-origin frame. Before the page load, you were bound to the origin policy: > https://localhost:3000 A cross origin error happe
我想使用jQuery在iframe内部操纵HTML. 我认为我能够通过将jQuery函数的上下文设置为iframe的文档来做到这一点,例如: $(function(){ //document ready $('some selector', frames['nameOfMyIframe'].document).doStuff() }); 但是这似乎不起作用.一些检查表明,除非我等待一段时间iframe加载,否则frames['nameOfMyIframe']中的变量是undefined>.但是,当iframe加载变量时,无法访问变量(我得到permission denied type错误). 有人知道这个工作吗? 解决方案 我认为您正在做的事情受相同的原点策略.这应该是您获得权限拒绝类型错误的原因. 其他解决方案 如果来自同一域,则可以轻松访问 $("#iFrame").contents().find("#someDiv
我有一个带有iframe的页面.页面和iframe的来源在不同的域中.在iframe内部,我使用的是一个名为Cuteeditor的丰富文本编辑器(事实证明并不那么可爱). Cuteeditor中有某些JavaScript功能可以尝试访问"文档",但是浏览器拒绝访问,因为它们不在同一域中. 这是确切的错误: 拒绝访问属性"文档"的权限 在/dialoghead.js 第1行 编辑JavaScript是不可能的,因为它已被缩小和混淆,因此所有变量名称都是隐秘的. 使用其他编辑器目前不可能解决问题,因为这是一个工作项目,这是我被告知要使用的编辑器. 有没有办法保持iframe独立?因此,它可以在iframe内部完成所有操作,并且不会试图突破父框架? 解决方案 如果孩子是从另一个域加载的孩子,那么它将无法访问父页面或DOM. 但是,如下所示,仍然存在一个可能的中间攻击的脆弱性.假设您的页面已加载 http://yoursite.com ,iframe
我试图将表单数据发送到网络服务,但以下是Chrome dom的"网络"中的"请求标题",我得到了Origin evil.example和Referer" Localhost:8080". Accept:application/json, text/plain, */* Accept-Encoding:gzip, deflate Accept-Language:nb-NO,nb;q=0.8,no;q=0.6,nn;q=0.4,en-US;q=0.2,en;q=0.2 Connection:keep-alive Content-Length:91 Content-Type:application/x-www-form-urlencoded; charset=UTF-8; Host:office.insoft.net:9091 Origin:http://evil.example/ Referer:http://localhost:8080/ User-Agent:Mozilla/5.0
我当前已经设置了我的服务器文件: export default createServer = (container) => { const env = process.env.NODE_ENV const allowedOrigins = process.env.ALLOWED_ORIGINS || '' const allowedOriginsArray = allowedOrigins.split(",").map(item => item.trim()); const cors = Cors({ origins: allowedOriginsArray, allowedHeaders: [ 'access-control-allow-origin', 'authorization', 'Pragma', 'contact', ], exposeHeaders: [] }) }
我有2个具有以下域的nodejs应用程序: Local主机:8000 Local主持:3000 在Localhost:3000中,我有一个文本方面和一个提交按钮. 我想将TextArea(使用后)的内容发布到Localhost:8000/(Some_id),并在LocalHost:8000页面上显示内容. 然后,我想在localhost中显示localhost:8000/(some_id)的iframe:3000页. 我在实现这一目标方面遇到了很多麻烦.我必须使用Postmessage(). 以这种方式完成它. ps:我知道最好避免iframe,但是出于我的应用程序,这是必要的. 解决方案 无论您在一侧的postMessage什么都会发送到另一侧的message侦听器. // in the parent document iframeElement.contentWindow.postMessage('hi!'); // in t
(如果需要,请参见我的最后一个问题以获取更多背景信息.) 我正在开发一个使用前后脱钩的应用程序: 后端是一个铁路应用程序(在localhost:3000上使用),主要提供REST API. 前端是一个AngularJS应用程序,我正在与Gulp一起构建并在本地搭建(使用 browsersync "> browsersync )在localhost:3001上. 在纪念worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 3002; root /; # Rails location ~ \.(json)$ { proxy_pass http://localhost:3000; } #
发送cookie的默认值是SameSite=Lax,这意味着发送cookie是为了获取请求,但被阻止. 有了交叉来源获取请求,由于Same-Origin-Policy>,响应被阻止,除非响应包含Access-Control-Allow-Origin. 为什么Access-Control-Allow-Origin不够? 为什么您要返回Access-Control-Allow-Origin: someDomain.com而又不会返回Access-Control-Allow-Credentials? 为什么允许交叉来源从受信任的域获得请求,但仅在发送cookie时阻止响应? 解决方案 允许在cookie存在的情况下允许交叉形象共享更具风险,因为这可以向恶意脚本揭示用户的私人信息.没有cookie,脚本只能访问公共信息 - 只需从任何计算机导航到URL就可以访问的相同信息. 因此,Access-Control-Allow-Credentials的存在标志着一
我刚刚阅读 相同的原始策略允许使用get和发布的原孔间HTTP请求 方法但否认原始插入和删除请求 put/delete有什么特别之处?他们为什么被阻止?无论如何,您都可以在帖子方法中进行更新/删除. 使用CORS,如果使用XML/JSON而不是Application/X-WWW-Form-urlenCoded? 请解释为什么有些动词对其他动词有所不同. 解决方案 基本区别是在用户导航网页触发的那种请求与脚本触发的那种请求之间的区别.这种区别基于早期浏览器认为安全且不安全的内容源于网络历史记录.此后,所有浏览器都试图保持向后兼容性,以免违反依靠早期 de em exto 标准的服务器的期望. 用户导航网络生成了什么样的请求?基本上,GET请求和POST由表单提交触发的请求.浏览器始终允许使用这种交叉原始请求,因此他们假设服务器旨在处理它们.但这不包括例如POSTS具有只能由脚本添加的自定义标题. (有关使请求安全是否安全的确切描述,请参见请参阅我的答案此处有关
我在 http://localhost:8080 中 http://example.com 可以做发布请求: 'use strict'; const express = require('express'); const app = express(); const port = 8080; // allowing CORS for example.com app.use('/', function (req, res, next) { res.header('Access-Control-Allow-Origin', 'http://example.com'); if (req.method === 'OPTIONS') { res.header('Access-Control-Allow-Methods', 'OPTIONS, POST'); res.header('Access-Control-Allow-Headers'
我对所有这些相同的政策都疯狂. 当我尝试向Google Maps API提出请求时,我没有问题: var jsonData = $.ajax({ url:"http://maps.googleapis.com/maps/api/geocode/json?address=", dataType:"json", async:true, success: function(json){...} } 我认为这是因为Google Maps API允许访问控制 - 允许孔.但是,当我尝试使用openls.geog.uni-heidelberg.de api时,我会遇到交叉原始错误: var xmlData = $.ajax({ type: "GET", url:"http://openls.geog.uni-heidelberg.de/route?"
(如果没有,它实际上可以改善客户端安全吗?) 我正在考虑从服务器X使用XHR来获取和运行不信任代码的情况(支持CORS). . (显然评估不信任的代码是Bad™) 解决方案 我根本不使用COR来提高安全性.我使用CORS访问其他域上的已知Web服务,如果没有CORS,我将不允许我访问.我认为与改善安全性无关,而是允许将一个域中的数据委托给另一个域. 其他解决方案 cors与硬化安全性无关,它是关于弱> it(但仅在服务器许可的某些条件下). 如果要在AJAX请求中的另一台服务器中访问其他服务器,则没有CORS,由于"安全性"(相同的原始策略),您不允许您使用它,这就是它的终结*.使用CORS,另一台服务器可以允许减少该安全性障碍. *除了JSONP之类的黑客外,这也需要服务器的权限 其他解决方案 CORS颠覆了同一原始策略,但有选择地.例如,银行网站域根本不会设置CORS标题(以使同一原始效果保持完全效果),因为没有从其他域中下载的Jav
我试图做一个将饼干和它一起发送的cors.我已经在服务器中设置了所有标题(access-control-allow-origin,access-control-allow-credentials,access-control-allow-headers),并在jQuery ajax请求中使用withCredentials: true和crossDomain: true.当我告诉浏览器允许第三方Cookie时,一切正常.有什么办法可以在不强迫访客允许第三方饼干的情况下做到这一点?我什至尝试过重定向用户并将其重定向,但是CORS会拒绝将Cookie发送. :/ 我尝试通过Ajax以及通过IFRAME进行CORS请求. 解决方案 我认为这是不可能的.请参阅我(旧但相关的)博客文章/a>对此. 唯一的防弹方法是使用第一方cookie(即,在顶级窗口中打开窗口,例如单独的选项卡,或重定向当前窗口). 在某些情况下,没有必要.浏览器对哪个第三方Cookie的概念略有不同,默认行为
假设我有一个html页面,请从示例com.它向targetserver.com提出JavaScript Ajax请求 哪个服务器需要返回access-control-allow-origin ="(某种)"? 是为原始HTML页面提供的目标服务器还是服务器(I.E. example.com)? [我知道这可能很明显,但是Web上的文档似乎暗示Targetserver必须发送和允许Origin的标题,但如果这是安全功能,恶意的Targetserver.com不会总是为合适的允许原产蛋白标头提供吗?示例com.com将为浏览器提供一个服务器列表,除了示例: 解决方案 目标服务器需要设置Access-Control-Allow-Origin标头. CORS旨在保护服务器免受意外的交叉原始请求.在CORS存在之前的一个世界中,浏览器的.如果将CORS自动允许到所有服务器,则该相同的原始合同将断开,服务器将收到意外的请求.为了防止这种情况,CORS规格的作者将服务器负责
考虑两个站点a - https://example1.xyz.com ,另一个是b- https://example2.xyz.com .现在,我必须从A到B提出HTTP Get请求. "不在请求 资源.原点' http://example1.xyz.com 因此不允许 访问." 所以,我正在添加B 中的以下响应标头 response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin")); 这解决了相同的原点错误,我可以请求B. response.setHeader("Access-Control-Allow-Credentials", "true"); 当我谷歌搜索以解决此same-origin错误时,大多数建议使用两个标头.我不清楚使用第二个Access-Control-Allow-Credentials. 我什么时候应该同时使用? 为什么我应该将Access-Co