谈CSRF与JSONP设置header问题
关于前端发起请求
问题一 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如何跨域
- 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
谈CSRF与JSONP设置header问题的更多相关文章
- 解决AJAX跨域:1、利用JSONP;2、JS设置Header
一.利用JSONP: 首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版: $(document).ready(function(){ var url='http://localho ...
- 关于安全性问题:(XSS,csrf,cors,jsonp,同源策略)
关于安全性问题:(XSS,csrf,cors,jsonp,同源策略) Ajax 是无需刷新页面就能从服务器获取数据的一种方法.它的核心对象是XHR,同源策略是ajax的一种约束,它为通信设置了相同的协 ...
- django 浅谈CSRF(Cross-site request forgery)跨站请求伪造
浅谈CSRF(Cross-site request forgery)跨站请求伪造(写的非常好) 本文目录 一 CSRF是什么 二 CSRF攻击原理 三 CSRF攻击防范 回到目录 一 CSRF是什么 ...
- 浅谈CSRF(Cross-site request forgery)跨站请求伪造
目录 浅谈CSRF(Cross-site request forgery)跨站请求伪造 CSRF是什么 CSRF攻击原理 CSRF攻击防范 浅谈CSRF(Cross-site request forg ...
- 与你相遇好幸运,Postman设置Header不生效问题解决
POstMan安装地址 安装完 , Postman 设置Header的Referer不生效 , 提示 Restricted Header (use postman interceptor) 时 , 要 ...
- IOS NSURLRequest 设置 Header
https://my.oschina.net/wolx/blog/406092 工程中的请求,需要设置Header,请求令牌才访问,NSURLRequest 请求没有直接设置header 的方法,需要 ...
- Spring 使用 feign时设置header信息
最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式.但是遇到一个问题:个别请求是要设置header的. 于是,查看官方文档和博客,大致推荐两种方式.也可能是我没看明 ...
- NodeJS设置Header解决跨域问题
转载: NodeJS设置Header解决跨域问题 app.all('*', function (req, res, next) { res.header('Access-Control-Allow-O ...
- golang-http 请求---设置header与直接发
背景 现在各种软件到处都是,写代码难免有时候需要http 调用其他的接口. 其实这个东西还挺常用,虽然很简单,但是写的时候 又忘,就像是提笔忘字,索性总结一下吧. 不需要设置header属性的http ...
随机推荐
- JRE和JDK的作用和区别
JVM(Java Virtual Machine)是一个虚拟的用于执行bytecode字节码的“虚拟计算机”JRE(Java Runtime Environment):Java 虚拟机.库函数 ...
- Acquire and Release Fences
转载自: http://preshing.com/20130922/acquire-and-release-fences/ Acquire and release fences, in my op ...
- Essential C++ Reading Notes
Chapter1 P6, 1.2 Why //#include<string> we still can use "string user_name"? -->c ...
- 笔记-6:mysql索引
1.索引概述 建立索引的目的:加快数据库检索的速度. mysql中索引主要分为: 普通索引:使用index或key关键字创建,其索引列值可以取空值或重复值. 唯一性索引:使用关键字UNIQUE创建,其 ...
- 缓冲区Buffer和缓存区Cache的区别
1.buffer 将数据写入到内存里,这个数据的内存空间在Linux系统里一般被称为缓冲区(buffer),例如:写入到内存buffer缓冲区,即写缓冲. 为了提高写操作性能,数据在写入最终介质或下一 ...
- Python3 和 Python2的区别
目录 print Python2.7的print不是一个function Python3里的print是一个function. Unicode Python 2 有 ASCII str() 类型,un ...
- 关于UBOOT,LINUX内核编译,根文件系统的15个小问题
(1)内核默认运行地址和加载地址在哪里设置? 由 arch/arm/kernel/vmlinux.lds.S 生成的 arch/armkernel/vmlinux.lds决定 (2)从FLASH什 ...
- uboot 代码执行顺序
ref:http://blog.chinaunix.net/uid-30352139-id-5128405.html uboot: 2014.07 1.1 U-boot相关文件 boards.c ...
- SQL Server中语句的自动参数化
原文:SQL Server中语句的自动参数化 use master go if exists(select * from sys.databases where name = 'test') drop ...
- C#四种深拷贝方法(转载)
原文地址:https://www.cnblogs.com/profession/p/6222489.html //四种深拷贝方法 public static T DeepCopyByReflect&l ...