关于Ajax跨域启用CORS解决方案的思考

 Ajax跨域启用CORS解决已经不用在这里赘述,今天又度娘了一把,无非是在JSP中设置response的响应头:Access-Control-Allow-Origin,为* 或者设置为目标域站点
关于Ajax跨域启用CORS解决方案的思考

或者response.setHeader("Access-Control-Allow-Origin","*");这里是我在自己本地用两tomcat模拟这种情况,但是这两种情况都存在潜在的危险,做为一个严谨的web开发人员来,这两种做法的安全性完成不够,设置成*的同仁们毫不客气地说,是对自己写的程序的不负责,也是对别人的不负责,原因有两点:1,这里设置成*完,表示任何网络请求都可以访问该目标站点,这为黑客的攻击提供了方便,黑客人员完全不需要费什么劲,就可以截获目标站点的数据。2、把这种解决方案的文章发出来后,其它遇到Ajax跨域问题,也采用同样的解决办法后,其开发出来的web站点也同时会存在这样的潜在安全威胁。
第二种当然就是直接在setHeader里设置站点名,这种方式看似要安全些,其实不然,因为黑客同样可以自行模拟正常的请求(只要拼出合法请求站点的正确域名),然后也能截获目标站点的数据。
所以前面提到的两种方式都有存在一定的问题,个人的理解,应该采用如下的方式:
在需要请求的目标站点页面设置Header的Access-Control-Allow-Credentials为true:
response.setHeader("Access-Control-Allow-Credentials","true"); --这里表示需要发送跨域证书,此时Access-Control-Allow-Origin属性设置为*将失效。然后再设置Access-Control-Allow-Origin具体站点值,最后,当发起Ajax请求的JSP页面,需要使用数字证书、签名等技术(防止黑客伪造Ajax请求),被请求的站点通过这些验证后,才继续进行跨域请求动作。
以上说法皆是个人观点,如有不对欢迎讨论,拍砖。

你可能感兴趣的:(关于Ajax跨域启用CORS解决方案的思考)