谈CSRF与JSONP设置header问题

更新日期: 2019-06-11 阅读: 3.8k 标签: csrf

问题一 JS发起请求的方式

方法一:JS代码中发起请求的方式普遍为AJAX,该技术在 1998 年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)  
方法二:script标签请求
方法三:通过html的方法


通过js自动在jsp中创建一个form表单,并给其method属性为post

function post(URL, PARAMS) {        
    var temp = document.createElement("form");        
    temp.action = URL;        
    temp.method = "post";        
    temp.style.display = "none";        
    for (var x in PARAMS) {        
        var opt = document.createElement("textarea");        
        opt.name = x;        
        opt.value = PARAMS[x];               
        temp.appendChild(opt);        
    }        
    document.body.appendChild(temp);        
    temp.submit();        
    return temp;        
}        

$(".submit_d a").click(function(){
    var data = ($(this).attr("class")).split("-");
    var series = data[0];
    var discharge = data[1];
    var carriageNum = data[2];
    var seatNum = data[3];
    var gear = data[4];
    var cost = data[5];
    var pictureUrl = data[6];
    var id = data[7];
    post(ctx+"/order/rentcar.action",{"series":series,"discharge":discharge,"carriageNum":carriageNum,"seatNum":seatNum,"gear":gear,"cost":cost,"pictureUrl":pictureUrl,"id":id});
});


问题二 设置header、cookie

CSRF发起的请求可以设置cookie(token)、header么

CSRF或者jsonp,利用时需要跨域。


CORS

简单来说,请求时浏览器检测到跨域,会带上Origin,得到服务器的准许后才能够获取数据

CORS不仅设置了AJAX跨域时的域名,还有请求方法、返回Header获取字段、允许发送cookie等

浏览器同源政策及其规避方法(阮一峰)

CORS需要大多数情况下,前端是无感知的,这是后端服务器做的部分。


JSONP

JSONP能够跨域的原因在于 标签允许跨域。

通过script拿到数据,形如 

将会返回 foo(data)打在前端

前端再定义function foo(){},返回前端时就直接调用并传入数据。

缺点:

限于GET方法

一样无法自定义设置header和cookie。


代理

本地设置代理,ajax请求本地代理,再由本地通过非ajax方法去请求数据,返回给前端。不考虑。但是在某些情况下可以用,比如payload中需要拼接由跨域获取的数据。


这三种方法都是JS/AJAX跨域的方法。
在CSRF/JSONP劫持的运用上,CORS跨域被限制的情况下不存在了,因此AJAX的GET/POST一堆灵活操作没法用。JSONP也无法设置header、cookie等。FORM表单请求的方式当然也没法设置header。 


结论 

CSRF/JSONP劫持中所用请求难以自定义header、cookie



本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/3657

web安全_Web站点如何防范XSS、CSRF、SQL注入攻击

XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本,CSRF(XSRF)尽管听起来很想XSS跨站脚本攻击,但是它于XSS完全不同。SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

前端安全:如何防止CSRF攻击

为了更好的防御CSRF,最佳实践应该是结合上面总结的防御措施方式中的优缺点来综合考虑,结合当前Web应用程序自身的情况做合适的选择,才能更好的预防CSRF的发生。

CSRF跨站请求伪造

CSRF,是跨站请求伪造(Cross Site Request Forgery)的缩写,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任

CSRF绕过后端Referer校验

CSRF绕过后端Referer校验分正常情况和不正常的情况,我们这里主要讨论开发在写校验referer程序时,不正常的情况下怎么进行绕过。

跨站请求伪造CSRF原理及防范

跨站请求伪造(Cross Site Request Forgery),缩写为CSRF或者XSRF,它是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。防范CSRF是保障系统稳定性的其中一环

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!