我试图通过连接到Flask内置的RESTful API来使用JavaScript进行授权.但是,当我发出请求时,我收到以下错误:
XMLHttpRequest无法加载http:// myApiUrl/login.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.
我知道API或远程资源必须设置标题,但为什么在我通过Chrome扩展程序Postman发出请求时它可以正常工作?
这是请求代码:
$.ajax({
type: "POST",
dataType: 'text',
url: api,
username: 'user',
password: 'pass',
crossDomain : true,
xhrFields: {
withCredentials: true
}
})
.done(function( data ) {
console.log("done");
})
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
alert(textStatus);
});
Run Code Online (Sandbox Code Playgroud) 我理解它的方式,如果在foo.com页面上运行的客户端脚本想要从bar.com请求数据,请求必须指定标题Origin: http://foo.com,并且栏必须响应Access-Control-Allow-Origin: http://foo.com.
有什么可以阻止来自网站roh.com的恶意代码简单地欺骗标题Origin: http://foo.com来请求来自bar的页面?
我最近不得不设置Access-Control-Allow-Origin为*能够进行跨子域ajax调用.
现在我不禁觉得我的环境存在安全风险.
如果我做错了,请帮助我.
如果有人发送XHR请求some-client.com来some-rest.com,我想获得原点(域名,而不是客户端IP与PHP请求).
可能的解决方案:
$_SERVER['HTTP_ORIGIN']但我不知道它是否是一个标准.$_SERVER['HTTP_HOST']或$_SERVER['SERVER_NAME'],但有些情况下这会返回真实hostname而非真实domain.$_SERVER['REMOTE_ADDR']给客户端IP.什么是使用PHP获取域名等请求的正确方法?
谢谢!
ajax ×3
cors ×3
javascript ×2
apache ×1
cross-domain ×1
http ×1
jquery ×1
php ×1
request ×1
security ×1