百度做网站联系电话怎么做一个好的wordpress
百度做网站联系电话,怎么做一个好的wordpress,网页设计案例100例,南海佛山网站建设一、同源策略
同源策略(Same Origin Policy): 同源是指域名#xff0c;协议#xff0c;端口完成一致#xff0c;那么这两个url就是同源。同源策略是一种约定#xff0c;它是浏览器最核心也最基本的安全功能#xff0c;也是浏览器故意设置的一个功能限制。如果缺少了同源策…一、同源策略
同源策略(Same Origin Policy): 同源是指域名协议端口完成一致那么这两个url就是同源。同源策略是一种约定它是浏览器最核心也最基本的安全功能也是浏览器故意设置的一个功能限制。如果缺少了同源策略浏览器很容易受到XSS、CSFR等攻击。使用代码window.origin或者location.origin可以获取当前的源。源 协议域名端口号。
同源情况下的限制行为
Cookie、LocalStorage 和 IndexDB 无法读取DOM 和 Js对象无法获得AJAX 请求不能发送
但是有三个标签是允许跨域加载资源 img srcXXX link hrefXXX script srcXXX
二、跨域
跨域指的是协议protocol 域名host端口号post都不相同的资源之间尝试着进行交互通信而由于受浏览器同源策略的限制无法正常进行交互通信。
URL说明是否允许通信http://www.a.com/a.js 访问 http://www.a.com/b.js同一域名允许http://www.a.com/user/a.js 访问 http://www.a.com/order/b.js同域名不同路径允许http://www.a.com:8000/a.js 访问 http://www.a.com/b.js同域名不同端口不允许http://www.a.com/a.js 访问 https://www.a.com/b.js同域名不同协议不允许http://www.a.com/a.js 访问 http://70.32.92.74/b.js域名和域名对应ip不允许http://www.a.com/a.js 访问 http://m.a.com/b.js主域相同子域不同不允许cookie这种情况下也不允许访问http://www.a.com/a.js 访问 http://a.com/b.js同一域名不同二级域名同上不允许cookie这种情况下也不允许访问http://www.baidu.com/a.js 访问 http://www.csdn.com/b.js不同域名不允许
限制跨域的原因 例如一个用户登录网银进行操作Cookie会生成并存储在浏览器中。接着用户无意点入一个钓鱼网址这个钓鱼网站得到网银的Cookie, 读取你的用户信息然后通过跨域请求网银对用户的网银账号进行操作。 钓鱼网站的JS请求和网银网站的JS请求几乎没有区别referrer有区别但是如果后台程序员不做检查就完全没有区别。 结论如果浏览器不限制跨域这种情况下用户的信息安全得不到保障任何网站都有可能任意访问请求到用户的信息操作行为等等。
三、解决跨域JSONP和CORS
1.JSONP
JSONP是利用浏览器对script的资源引用没有同源限制通过动态插入一个script标签当资源加载到页面后会立即执行的原理实现跨域的。JSONP是一种非正式传输协议该协议的一个要点就是允许用户传递一个callback或者开始就定义一个回调方法参数给服务端然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据这样客户端就可以随意定制自己的函数来自动处理返回数据了。 JSONP只支持GET请求而不支持POST等其它类型的HTTP请求,它只支持跨域HTTP请求这种情况不能解决不同域的两个页面之间如何进行JavaScript调用的问题JSONP的优势在于支持老式浏览器弊端也比较明显需要客户端和服务端定制进行开发服务端返回的数据不能是标准的Json数据而是callback包裹的数据。
前端请求
$.ajax({url: http://otherdomain.com/manage/role/get,async: false,type: get, 5 dataType: jsonp,data:{id:1 },jsonp: callback,jsonpCallback:fn,success: function(data){alert(data.code);},error: function(){alert(fail);}})后端响应
RequestMapping(/manage/role/get)
ResponseBody
public String get(HttpServletRequest request, HttpServletResponse response) {BaseOutput outPut new BaseOutput();try {QueryFilter filter new QueryFilter(request);logger.info(filter.toString());String id filter.getParam().get(MainConst.KEY_ID);if(!StringUtil.isEmpty(id)) {ImRole role roleService.getByPk(filter);outPut.setData(role);}else {outPut.setCode(OutputCodeConst.INPUT_PARAM_IS_NOT_FULL);outPut.setMsg(The get id is needed.);}} catch (Exception e) {logger.error(获取角色数据异常, e);outPut.setCode(OutputCodeConst.UNKNOWN_ERROR);outPut.setMsg(获取角色数据异常 e.getMessage());}return fn(JsonUtil.objectToJson(outPut));
}注意 1.Ajax请求需要设置请求类型为Jsonp
dataType: jsonp2.Ajax请求需要设置回调函数当前函数值必须与服务器响应包含的callback名称相同
jsonpCallback:fn3.Ajax请求可以设置jsonp可选传递给请求处理程序或页面用以获得jsonp回调函数名的参数名默认为:callback
jsonp: callback4.服务端返回Json数据必须使用jsonpCallback设置的值进行包裹
return fn(JsonUtil.objectToJson(outPut))2.CORS
CORS是现代浏览器支持跨域资源请求的一种方式全称是跨域资源共享Cross-origin resource sharing当使用XMLHttpRequest发送请求时浏览器发现该请求不符合同源策略会给该请求加一个请求头Origin后台进行一系列处理如果确定接受请求则在返回结果中加入一个响应头Access-Control-Allow-Origin;浏览器判断该相应头中是否包含Origin的值如果有则浏览器会处理响应我们就可以拿到响应数据如果不包含浏览器直接驳回这时我们无法拿到响应数据。 CORS与JSONP的使用目的相同但是比JSONP更强大CORS支持所有的浏览器请求类型承载的请求数据量更大开放更简洁服务端只需要将处理后的数据直接返回不需要再特殊处理。
前端请求
function test() {$.ajax({url: http://localhost:8080/AdsServer/manage/role/get,type: get,async: false,data:{id:1 },dataType:json,withCredentials:true,success: function(data){alert(data);alert(data.code);},error: function(){alert(fail);}})}后端响应
RequestMapping(/manage/role/get)
ResponseBody
public String get(HttpServletRequest request, HttpServletResponse response) {BaseOutput outPut new BaseOutput();try {QueryFilter filter new QueryFilter(request);logger.info(filter.toString());String id filter.getParam().get(MainConst.KEY_ID);if(!StringUtil.isEmpty(id)) {ImRole role roleService.getByPk(filter);outPut.setData(role);}else {outPut.setCode(OutputCodeConst.INPUT_PARAM_IS_NOT_FULL);outPut.setMsg(The get id is needed.);}} catch (Exception e) {logger.error(获取角色数据异常, e);outPut.setCode(OutputCodeConst.UNKNOWN_ERROR);outPut.setMsg(获取角色数据异常 e.getMessage());}return JsonUtil.objectToJson(outPut);
}服务端增加过滤拦截器(web.xml)
filterfilter-namecrossDomainFilter/filter-namefilter-classcom.luwei.core.filter.CrossDomainFilter/filter-class
/filter
filter-mappingfilter-namecrossDomainFilter/filter-nameurl-pattern*/url-pattern
/filter-mapping服务端增加过滤拦截器(java)
package com.luwei.core.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.luwei.console.mg.constant.ApplicationConfiConst;/***/public class CrossDomainFilter implements Filter {private Logger logger LoggerFactory.getLogger(getClass());public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {ApplicationConfiConst confiConst (ApplicationConfiConst) ContextUtil.getBean(applicationConfiConst);HttpServletResponse response (HttpServletResponse) res;HttpServletRequest request (HttpServletRequest) req;String referer request.getHeader(referer);String origin null;if (null ! referer) {String[] domains confiConst.getCanAccessDomain().split(,);for (String domain : domains) {if (StringUtils.isNotEmpty(domain) referer.startsWith(domain)) {origin domain;break;}}}response.setHeader(Access-Control-Allow-Origin, origin);response.setHeader(Access-Control-Allow-Methods, POST, GET, OPTIONS, DELETE,PATCH);response.setHeader(Access-Control-Max-Age, 3600);response.setHeader(Access-Control-Allow-Headers, x-requested-with);// 是否支持cookie跨域response.addHeader(Access-Control-Allow-Credentials, true);String requestURI ((HttpServletRequest) req).getRequestURI();long begin System.currentTimeMillis();chain.doFilter(req, res);if (logger.isDebugEnabled()) {logger.debug([Request URI: requestURI ], Cost Time: (System.currentTimeMillis() - begin) ms);}}}增加设置能够通过跨域访问的服务器地址:
#设置能够访问接口的域多个通过都好分割不能配置127.0.0.1
CAN_ACCESS_DOMAINhttp://localhost:8020,http://localhost:9999,http://localhost:8080注意 1.Ajax请求必须要设置withCredentials属性为true
withCredentials:true2.服务端需要配置过滤器讲配置能够进行跨域访问服务器的地址进行配置
response.setHeader(Access-Control-Allow-Origin, origin);
response.setHeader(Access-Control-Allow-Methods, POST, GET, OPTIONS, DELETE,PATCH);
response.setHeader(Access-Control-Max-Age, 3600);
response.setHeader(Access-Control-Allow-Headers, x-requested-with);
// 是否支持cookie跨域
response.addHeader(Access-Control-Allow-Credentials, true);3.withCredentials设置成true时Access-Control-Allow-Origin不支持通过*的方式进行统配 4.Access-Control-Allow-Origin不能直接配置多个请求服务器但是可以通过静态配置多个的方式然后根据referer匹配匹配到哪个则设置Access-Control-Allow-Origin为哪个的方式来配置多个 5.jqGrid配置跨域请求的方式为
ajaxGridOptions: {xhrFields: {withCredentials: true}
},四、跨域应注意漏洞
1.JSONP劫持漏洞
当网站通过 JSONP 的方式来跨域传递用户认证后的敏感信息时 如果 服务端对 JSONP 的请求来源校验不严格那么攻击者可以构造恶意的 JSONP 调用页面诱导被攻击者访 问达到截取用户敏感信息的目的。 jsonp 与 csrf 类似都是需要用户登录帐号身份认证还没有被消除的情况下访问攻击者精心设计好的的页面。就会获取 json 数据把 json 数据发送给攻击者。 利用过程寻找敏感 json 数据 api 接口构造恶意的代码。 发送给用户用户访问有恶意的页面数据会被劫持发送到远程服务器。 产生漏洞的原因 网站没有对 JSONP 请求来源进行校验和过滤导致任意域都能够获取数据。
2.CORS漏洞
因为同源策略的存在不同源的客户端脚本不能访问目标站点的资源如果目标站点 CORS 配置不 当没有对请求源的域做严格限制导致任意源都可以访问时就存在cors 跨域漏洞题。 原理攻击者可以利用 Web 应用对用户请求数据包的 Origin 头校验不严格诱骗受害者访问攻击者制作 好的恶意网站从而跨域获取受害者的敏感数据。 注意关键字
Access-Control-Allow-Origin 指定哪些外域可以访问本域资源
Access-Control-Allow-Credentials 指定浏览器是否将使用请求发送 Cookie 。仅当设置 true
时才会发送 Cookie 默认是 false
Access-Control-Allow-Methods 指定可以使用哪些 HTTP 请求方法 GET 、 POST 、 PUT 、 DELETE 等来访问资源
Access-Control-Allow-Headers 指定可以在请求报文中添加的 HTTP 头字段
Access-Control-Max-Age 指定超时时间
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87152.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!