在本文中,我们将给您介绍关于php–有没有安全的方法来允许跨站点AJAX请求?的详细内容,并且为您解答php允许跨域访问的相关问题,此外,我们还将为您提供关于ajax–是否可以通过使用CNAME记录来
在本文中,我们将给您介绍关于php – 有没有安全的方法来允许跨站点AJAX请求?的详细内容,并且为您解答php允许跨域访问的相关问题,此外,我们还将为您提供关于ajax – 是否可以通过使用CNAME记录来允许跨域请求?、AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数、Ajax请求有没有可能请求还没有完成就读取返回?、java – 实现HTTP代理以克服跨站点AJAX请求限制(?)的知识。
本文目录一览:- php – 有没有安全的方法来允许跨站点AJAX请求?(php允许跨域访问)
- ajax – 是否可以通过使用CNAME记录来允许跨域请求?
- AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数
- Ajax请求有没有可能请求还没有完成就读取返回?
- java – 实现HTTP代理以克服跨站点AJAX请求限制(?)
php – 有没有安全的方法来允许跨站点AJAX请求?(php允许跨域访问)
我目前正在开发一个网站所有者可以安装的脚本,它允许用户突出显示一个单词,并在一个小的弹出div中查看该单词的定义.我只是在业余时间做这个业余爱好而无意出售它或任何东西,但我仍希望它是安全的.
当文本突出显示时,它向我的域发送一个AJAX请求到一个PHP页面,然后在数据库中查找该单词并输出包含该信息的div.据我所知,同源策略禁止我使用普通的AJAX完成此操作,但我也不能使用JSONP,因为我需要返回HTML,而不是JSON.
我调查的另一个选择是添加
header("Access-Control-Allow-Origin: *");
到我的PHP页面.
由于我真的没有太多的安全经验,因为我这样做是一种爱好,有人可以向我解释使用Access-Control-Allow-Origin的安全风险:*?
或者我有更好的方法来做这件事吗?
解决方法:
Cross-Origin Resource Sharing (CORS),Access-Control-Allow-Origin标头字段后面的规范,建立了允许通过XMLHttpRequest的跨源请求,但通过提供允许server to define which cross-origin requests are allowed and which are not的接口来保护用户免受恶意站点读取响应.因此CORS不仅仅是简单地,Access-Control-Allow-Origin:*,表示允许来自任何来源的XHR请求.
现在回答您的问题:假设您的服务是公共的并且不需要任何身份验证,使用Access-Control-Allow-Origin:*来允许来自任何来源的XHR请求是安全的.但请确保仅在您希望允许该访问策略的那些脚本中发送该标头字段.
ajax – 是否可以通过使用CNAME记录来允许跨域请求?
我想从a.com向b.com提出客户端AJAX请求,这显然是不允许的.我想如果我创建了一个b.a.com – > b.com CNAME记录然后浏览器将允许此请求,因为这意味着拥有a.com域名的任何人想要明确允许对b.com的请求,但我仍然得到一个没有的Access-Control-Allow-Origin错误允许请求.是否无法通过CNAME进行此请求?
注意:我无法控制b.com,所以我无法在那里设置标题.
解决方法
“跨域请求”的“道路规则”通常由“同源政策”管理(参见:The W3C Commentary,Wikipedia,Google Browser Security Handbook,Mozilla Developer Network)
W3C明确指出:
An origin is defined by the scheme,host,and port of a URL.
根据这个定义,即使从foo.com到bar.foo.com的请求也会被阻止.
在您的示例中,您建议为bar.foo.com创建指向bar.com的CNAME(我假设您有拼写错误)应允许通过bar.foo.com向bar.com发送请求.但是,正如我上面所说,即使来自foo.com的请求也会在客户端阻止向bar.foo.com发出HTTP请求.
Mozilla的页面甚至有这个具体的例子:
Mozilla considers two pages to have the same origin if the protocol,
port (if one is specified),and host are the same for both pages. The
following table gives examples of origin comparisons to the URL
07004:URL | Outcome | Reason
07005 | Success
07006 | Success
07007 | Failure | Different protocol
07008 | Failure | Different port
http://news.company.com/dir/other.html | Failure | Different host
AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数
定义和用法
ajaxSetup() 方法为将来的 AJAX 请求设置默认值。
语法
$.ajaxSetup({name:value,name:value,... })
该参数为带有一个或多个名称/值对的 AJAX 请求规定设置。下面的表格中列出了可能的名称/值:名称 值/描述async 布尔值,表示请求是否异步处理。默认是 true。beforeSend(xhr) 发送请求前运行的函数。cache 布尔值,表示浏览器是否缓存被请求页面。默认是 true。complete(xhr,status) 请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。contentType 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。context 为所有 AJAX 相关的回调函数规定 "this" 值。data 规定要发送到服务器的数据。dataFilter(data,type) 用于处理 XMLHttpRequest 原始响应数据的函数。dataType 预期的服务器响应的数据类型。error(xhr,status,error) 如果请求失败要运行的函数。global 布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。ifModified 布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。jsonp 在一个 jsonp 中重写回调函数的字符串。jsonpCallback 在一个 jsonp 中规定回调函数的名称。password 规定在 HTTP 访问认证请求中使用的密码。processData 布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。scriptCharset 规定请求的字符集。success(result,xhr) 当请求成功时运行的函数。timeout 设置本地的请求超时时间(以毫秒计)。Traditional 布尔值,规定是否使用参数序列化的传统样式。type 规定请求的类型(GET 或 POST)。url 规定发送请求的 URL。默认是当前页面。username 规定在 HTTP 访问认证请求中使用的用户名。xhr 用于创建 XMLHttpRequest 对象的函数。
Ajax请求有没有可能请求还没有完成就读取返回?
rt,请求一个url,页面是边执行,边输出,Ajax请求的,有没有可能客户端在输出的同时读取内容?java – 实现HTTP代理以克服跨站点AJAX请求限制(?)
我有一个Spring-MVC webapp(3.0.5-RELEASE),它需要从另一个子域(通过AJAX从客户端/浏览器)访问另一个webapp的JSON webservices.
我过去通过以下方式解决了这个问题:
>编写一个代理请求的简单控制器,使用Apache Commons HttpClient处理请求.因此,克服了大多数浏览器的跨站点/跨源请求安全限制
>在服务器端实现JSONP服务(在调用我们自己的JSON服务时) – 并非总是可行
在JSONP不可能的情况下,是否有更好的方法(1.)?
和/或
有没有一个库可以为我处理这个?所以我不必自己编写所有的HttpClient代码 – 它不是很多代码,但我想知道我是否(非常)重新发明了这个轮子.
>如果API是以用户为中心的,它必须提供一个jsonp接口,这就是我将要使用的.以用户为中心意味着您无法理解调用API的任何理由,使用响应进行一些计算,可能会调用您的ajax服务之一,然后组合响应并向用户显示.
>如果我的用例包括调用API,然后对响应进行操作,例如从我的应用程序调用其他服务,组合数据然后将其显示给用户,我宁愿不在浏览器中执行此操作.我宁愿使用RestTemplate并对服务进行后端api调用.在这种情况下,没有跨域限制.
使用服务器代理绕过jsonp的唯一情况是,您创建的产品允许人们构建自定义插件,页面上托管的插件,但需要对应用程序开发人员服务器进行Ajax调用.这是一个非常复杂的案例! (例如,看看Apigee如何围绕现有网址创建Public Facing REST API,或者Zendesk如何允许您开发应用程序)
希望这可以帮助.
关于php – 有没有安全的方法来允许跨站点AJAX请求?和php允许跨域访问的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ajax – 是否可以通过使用CNAME记录来允许跨域请求?、AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数、Ajax请求有没有可能请求还没有完成就读取返回?、java – 实现HTTP代理以克服跨站点AJAX请求限制(?)等相关内容,可以在本站寻找。
本文标签: