gpt4 book ai didi

javascript - 当服务器端脚本可以轻松做到这一点时,为什么浏览器不允许 CORS?

转载 作者:行者123 更新时间:2023-12-02 15:03:17 26 4
gpt4 key购买 nike

在同源策略下,网络浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但前提是两个网页具有相同的源。

但是我没有理解它的本质。如果我无法从浏览器发出跨域请求,我将通过我的 PHP 进行请求脚本。它会工作得很好。不是吗?

因此,不要执行以下操作:

var xhr = new XMLHttpRequest();
var url = "https://www.google.com/finance/converter?a="+amount+'&from='+from+'&to='+to;
if(xhr) {
xhr.open('GET', url, true);
xhr.onload = function() {
// Handle
};
xhr.send();
}

这将导致:

XMLHttpRequest cannot load https://www.google.com/finance/converter?foo. No
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin abc.com is therefore not allowed access.

我可以通过我自己的 php 脚本发送 ajax 请求,例如:

$.ajax({
method: "GET",
url: "./bin/http/CimmClient.php",
dataType: 'html',
data:{
a: amount,
from: from,
to: to
}
})
.done(function(data, textStatus, jqXHR ){
// Handle
})

这工作得很好。 PHP只发送 HTTP向另一个域发出请求,然后将响应发送回 JavaScript。

那么,原则上有什么区别呢?为什么浏览器阻止发送跨域 HTTP 请求,而 php/java/其他很容易允许这样做?

最佳答案

实现这些限制并不是为了阻止您使用任何类型的服务,而是为了防止您不知道的恶意代码代表您行事。

因此,如果您愿意,您可以获得数据 - 例如使用服务器端脚本,那就可以了。但是,如果您将恶意网页加载到浏览器或被恶意软件感染的网页,其脚本将无法代表您执行操作并向第三方服务发送请求。

有人可能会说,这种跨源访问有合法的用例,但互联网上的安全性是一件大事,必须先考虑开发人员的舒适度。

例如,假设您有一家在线银行,它使用 cookie 来存储有关用户打开的经过身份验证的 session 的信息。您登录银行并检查您的帐户。您在浏览器中保持此选项卡打开,然后访问恶意网站。该网站使用简单的 GET 请求向银行发送 Ajax 请求交易列表。您的浏览器将调用 GET 请求并向银行发送 session cookie,银行将回复有关您帐户的敏感信息。然后,恶意脚本将数据上传到其服务器。一旦禁止跨源访问,这种情况就不再可能发生。

关于javascript - 当服务器端脚本可以轻松做到这一点时,为什么浏览器不允许 CORS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com