使用<脚本src=..查找站点的状态代码-安全问题
cross-frame scripting with <script src=.... to find status code of a site - Security issue?
我们有一个网站,其中Iframes指向动态Url(通过用户输入)。如果出现404/500或任何其他错误,我们希望用不同的用户友好的其他URL替换Iframe源。为此,我们可以使用oneror事件来识别动态网站何时出现问题。(然后,如果出现问题,请替换iframe url)这也适用于跨域url,但可能存在动态url可能是恶意的情况,并且当恶意代码将在我们网站的同一框架、同一域中执行时,就会出现这样的安全问题。
这个假设正确吗?有什么解决办法吗?还有其他建议吗?
谢谢,Tal
我们有一个网站,其中Iframes指向动态URL(通过用户输入)。如果出现404/500或任何其他错误,我们希望用不同的用户友好的其他URL替换Iframe源。
所以这听起来像是你在制造一种";网页中的浏览器"
为此,我们可以使用oneror事件来识别动态网站何时出现问题。(然后,如果出现问题,请替换iframe url)
是的,除了中没有多少东西发生错误事件。我想你从对其他答案的评论中已经意识到了这一点。如果我理解正确的话,您说的是使用一个伪script
元素首先加载URL(作为脚本,即使它不是真正的脚本),并使用script
元素的onload
/onerror
处理程序来确定URL是否有效(onerror
不会在脚本错误时启动,只会在网络错误时启动)。
这也适用于跨域url,但可能存在动态url可能是恶意的情况,并且当恶意代码将在我们网站的同一框架、同一域中执行时,就会出现这样的安全问题。
这个假设正确吗?
你的假设是正确的。如果URL确实包含脚本,它将在与您的网站位于同一域的用户浏览器中执行。
有什么解决办法吗?
一个简单的解决方法可能是像jsfiddle.net那样做。。。具有单独的子域作为";防火墙";在第三方内容和您的真实域之间。
还有其他建议吗?
脚本预加载破解实际上就是这样,一个破解。它挪用了脚本标记并发出了不必要的请求。我可能会考虑使用XHR来触发HEAD请求,或者做一些简单的服务器端代理。
是的,如果使用<script>
标记嵌入远程JS文件,则会出现安全问题,因为代码将在页面的上下文中执行。
想到的唯一解决方法是向资源发出服务器端请求并解析响应标头。然而,这可能与客户端请求的行为不同,因为调用将来自服务器,因此它将具有不同的IP、不同的cookie等。
如果用户只能指定框架的URL,那么框架文档中的任何脚本都将在框架文档的上下文中运行,而不是在嵌入框架的父文档的上下文下运行。
在框架内运行的脚本是否可以访问父文档(即您的文档)的问题取决于两个文档的来源:只有当它们相等时,两个文档才被称为相同来源。只有在这种情况下,一个文档才能访问另一个文档。
- AngularJS$http重定向状态代码
- AJAX错误状态代码500内部服务器错误
- 如何将JavaScript自动POST的状态代码获取到另一个域
- Http状态代码工厂AngularJs
- 成功ajax:如果是200状态代码,则运行函数else另一个函数
- 运行函数ifsuccess($.ajax)有200个状态代码
- XMLHttpRequest 对象状态代码为 0
- URL中包含特殊字符的HTTP状态代码
- 如何使用scalajs-angular获取请求的http状态代码
- Internet Explorer:可以't访问IFrame内容,除非状态代码为200
- 如何侦听跨域映像请求上的任何301/302重定向状态代码
- 如果 angularjs 中的状态代码为 403,请注销
- 如何让反应路由器响应 404 状态代码
- HTTP 状态代码 - Backbone.js 和 Jquery
- 如何使用 iframe.src 下载文件时获取返回状态代码
- 预检响应具有无效的 HTTP 状态代码 405 - AngularJS + Spring MVC
- 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息
- http 状态代码 NodeJS/ExpressJS 错误
- 执行服务呼叫时的状态代码 12004
- AngularJS:使用 ngResource 执行 GET 请求时的状态代码 0