谈csrf与jsonp设置header问题(代码片段)

huim huim     2022-12-18     678

关键词:

关于前端发起请求

问题一 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,利用时需要跨域。

跨域首先排除掉AJAX方法

AJAX如何跨域

  1. CORS
    简单来说,请求时浏览器检测到跨域,会带上Origin,得到服务器的准许后才能够获取数据。
    CORS不仅设置了AJAX跨域时的域名,还有请求方法、返回Header获取字段、允许发送cookie等
    浏览器同源政策及其规避方法(阮一峰)
    CORS需要大多数情况下,前端是无感知的,这是后端服务器做的部分。
  2. JSONP
    JSONP能够跨域的原因在于 标签允许跨域。
    通过script拿到数据,形如
    将会返回 foo(data)打在前端
    前端再定义function foo(),返回前端时就直接调用并传入数据。
    缺点:
    限于GET方法
    一样无法自定义设置header和cookie。
  3. 代理
    本地设置代理,ajax请求本地代理,再由本地通过非ajax方法去请求数据,返回给前端。不考虑。但是在某些情况下可以用,比如payload中需要拼接由跨域获取的数据。

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

FORM表单请求的方式当然也没法设置header。

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

前后端分离,解决跨域问题及django的csrf跨站请求保护(代码片段)

1.前后端分离解决跨域问题解决跨域调用服务并设置headers主要的解决方法需要通过服务器端设置响应头、正确响应options请求,正确设置JavaScript端需要设置的headers信息方能实现;关于跨域,前端会先发送OPTIONS请求,进行预检,... 查看详情

从内存层次浅谈动态与静态

...域,以调用静态的属性、方法当创建第一个类对象时,类代码由硬盘加载到内存时,静态内容加载一次,开辟区域存放,之后每次创建对象时不再加载。每个对象默认有指针指向这片 查看详情

分享一个jsonp劫持造成的新浪某社区csrf蠕虫

...章,之后这篇文章也会拿出来分享。因为新浪已经修复了问题,所以我先把这个漏洞分享出来。以下是当时写的部分文章。0x01引子听说新浪五月送衣服,我其实也没太多空去挖洞。本来想交一个两年前挖的CSRF刷粉,结果拿出来... 查看详情

djangocsrf说明与配置(代码片段)

...ET九、在HTTP头部添加自定义属性十、DjangoForm表单和Ajaxcsrf设置十一、Djangocsrf全局生效与局部生效十二、定义不需要CSRF防跨站请求的方法一、CSRF是什么CSRF全称(Cros 查看详情

Django:禁止(未设置 CSRF cookie。)

】Django:禁止(未设置CSRFcookie。)【英文标题】:Django:Forbidden(CSRFcookienotset.)【发布时间】:2016-11-2612:47:50【问题描述】:我遇到了“未设置CSRFcookie”的问题。我所需要的只是外部计费平台将更新发送到django服务器。在本地它... 查看详情

学习备忘录(代码片段)

... 接触到的解决跨域的方法JSONP,CORSCORS  在服务器端设置 Access-Control-Allow-Origin:*1header(‘Access-Control-Allow-Origin:*‘);//所有访问23header(‘Access-Control-Allow-Origin:http://www.study.com‘);//特定网站JSONP  本质是利用HTML中的<scirpt&g... 查看详情

14.header组件静态搭建+jsonp(代码片段)

Header组件这里的标题下的图案实现为关键,实现如下:/components/header/index.jsx文件内容如下: /*头部导航组件*/importReact,Componentfrom"react";import\'./index.css\'exportdefaultclassHeaderextendsComponentrender()return(<divclassName="header"><divclassN... 查看详情

CSRF 跨域

...RESTAPI后端目前使用基于cookie的CSRF保护。基本过程是后端设置一个可由客户端应用程序读取的cookie,然后在随后的HXR请求(我的CORS设置允许的)上,一个自定义标头与cookie一起传递,服务器检查两个值匹配。基本上,这一切都是... 查看详情

web前端安全之利用flash进行csrf攻击(代码片段)

...g属性,其中AllowScriptAccess控制Flash与HTML页面的通信,如果设置不恰当会导致XSS;而AllowNetworking控制Flash与外部网络的通信,如果设置不当会导致CSRF。CSRF的中文名称是“ 查看详情

JSONP 注入脚本未调用回调

...:我正在尝试从RestApi获取数据:我尝试了以下操作:varheaders:Headers=newHeaders(\'dataType\':\'jsonp\');letoptions=newRequestOptions(headers:headers); 查看详情

怎么解决跨域问题

...只能适用于主域相同子域不同的情况;  document.domain的设置是有限制的,我们只能把document 查看详情

对 CSRF 保护策略感到困惑

...该在每个会话或每个请求中更改吗?客户端或服务器应该设置csrf令 查看详情

Laravel:CSRF 令牌与 X-XSRF-TOKEN 不匹配 [重复]

...法让它在标头X-XSRF-TOKEN的ajax请求中工作?$.ajax(type:"POST",headers:\'X-XSRF-TOKEN\':token,url:\'/edit 查看详情

CodeIgniter 的 CSRF 令牌问题

...已确保使用form_open启动表单,在配置文件中将csrf_protection设置为true,并且我还确保隐藏的csrf名称和值字段与csrfcookie匹配,如下所示:http://d 查看详情

前端请求接口出现的跨域问题(代码片段)

1.针对跨域问题可以使用jsonp的方式解决2.可以使用header头来定义header(‘Access-Control-Allow-origin:*‘);header(‘Access-Control-Allow-Credentials:true‘);header(‘Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS‘);header( 查看详情

Access-Control-Allow-Headers 不允许请求头字段 X-CSRF-TOKEN

】Access-Control-Allow-Headers不允许请求头字段X-CSRF-TOKEN【英文标题】:RequestheaderfieldX-CSRF-TOKENisnotallowedbyAccess-Control-Allow-Headers【发布时间】:2018-12-1409:28:21【问题描述】:我正在使用vue和axios向embed.rock发出get请求。axios(method:\'get\',ur... 查看详情

带有 HttpHeaders 的 Angular 5 JSONP 请求

】带有HttpHeaders的Angular5JSONP请求【英文标题】:Angular5JSONPrequestwithHttpHeaders【发布时间】:2018-07-0905:27:47【问题描述】:我正在尝试使用一些HTTP标头参数执行JSONP请求。http.get很简单:letheader=newHttpHeaders();header.append(<header_param_n... 查看详情

Laravel CSRF 保护与 REST API

...LaravelCSRFprotectionwithRESTAPI【发布时间】:2016-09-0503:12:10【问题描述】:我的路由文件顶部有这段代码Route::when(\'*\',\'csrf\',array(\'post\',\'put\',\'delete\'));当我测试我的RESTfulAPI层时,我得到了令牌不匹配错误。如何解决这个问题?我对... 查看详情