如果您对X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于X-Requested
如果您对X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?的详细内容,并且为您提供关于ajax – $routeProvider:使用X-Requested-With标头的templateUrl请求、ajax – 在IE中,jquery的“X-Requested-With”标题变为“x-requested-with”(小写)、Ajax 请求的http头信息特点 x-requested-with、ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧的有价值信息。
本文目录一览:- X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?
- ajax – $routeProvider:使用X-Requested-With标头的templateUrl请求
- ajax – 在IE中,jquery的“X-Requested-With”标题变为“x-requested-with”(小写)
- Ajax 请求的http头信息特点 x-requested-with
- ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧
X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?
我正在开发一个完全由ajax驱动的应用程序,其中所有请求都通过一个基本上等于一个主控制器的主控制器,该主控制器看起来像这样:
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
fetch($page);
}
这通常足以防止跨站点请求伪造吗?
当没有随每个请求刷新整个页面时,具有旋转令牌是很不方便的。
我想我可以在每次请求时都将唯一令牌作为全局javascript变量传递和更新-但是以某种方式感到笨拙并且似乎本质上不安全。
编辑-也许像用户的UUID这样的静态令牌总比没有好?
编辑#2-正如 The Rook
指出的那样,这可能是一个令人毛骨悚然的问题。我已经阅读了两种方式的猜测,并听到了关于低版本Flash可用于这种恶作剧的遥远的耳语。由于我对此一无所知,因此我向所有可以解释这是CSRF风险的人悬赏。否则,我会将其交给
Artefacto 。谢谢。
ajax – $routeProvider:使用X-Requested-With标头的templateUrl请求
$is_ajax = $_SERVER [‘HTTP_X_REQUESTED_WITH’] ===’XMLHttpRequest’
在AngularJS中,通常在$routeProvider.when()中找到,您可以使用templateUrl:’/ path / on / server’从服务器获取模板.
我的问题是,templateUrl请求似乎没有设置X-Requested-With头,所以没有办法区分templateUrl请求与任何其他类型的请求.
有没有办法让$routeProvider发送X-Requested-With作为XMLHttpRequest?
参考:
> $routeProvider Docs – (搜索templateUrl)
> jQuery jqXHR – 参见jqXHR.setRequestHeader(“X-Requested-With”,“XMLHttpRequest”)
>使用Angular v1.1.5通过Google CDN
>更新:我发现actual commit Angular开发人员从$http.get中删除了X-Requested-With.想知道为什么他们会这样做?
>更新:https://github.com/angular/angular.js/issues/1004 – 头删除的讨论.
app.config(['$routeProvider','$httpProvider',function($routeProvider,$httpProvider) { $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; $routeProvider.when('/',{ templateUrl: '/path/on/server',controller: 'Ctrl' }); });
编辑:更具体来说,这是你需要的一行:
$httpProvider.defaults.headers.common [‘X-Requested-With’] =’XMLHttpRequest’;
ajax – 在IE中,jquery的“X-Requested-With”标题变为“x-requested-with”(小写)
在Firefox中,它是:“X-Requested-With”.
而在IE中,它是:“x请求 – 与”
Ajax 请求的http头信息特点 x-requested-with
很多用到AJAX请求,如何区别一个请求是传统的HTTP请求?还是Ajax请求?网上有很多,这里记录一下,方便以后直接查看,懒人计划,关键是看http请求头(header)信息中的 x-requested-with 信息项是否有无,如果无该头信息项,取出的是未定义的值,即null,则说明是传统请求;如果存在该头信息项,值是XMLHttpRequest 则说明是Ajax请求;
在JAVA WEB项目,比如在Server端的JSP中判断如下:
转自:http://blog.csdn.net/shenzhennba/article/details/9235373
两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数
1、传统同步请求参数
accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-charset gb2312,utf-8;q=0.7,*;q=0.7
accept-encoding gzip,deflate
accept-language zh-cn,zh;q=0.5
cache-control max-age=0
connection keep-alive
cookie JSESSIONID=1A3bed3F593EA9747C9FDA16D309AF6B
host 192.168.101.72:8080
keep-alive 300
referer http://192.168.101.72:8080/htfsweb/spring_security_login
user-agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)
2、Ajax 异步请求方式
accept */*
accept-language zh-cn
referer http://192.168.101.72:8080/scm/?token=3b194bff23bf6acecea5661ac8e14c51
x-requested-with XMLHttpRequest
content-type application/x-www-form-urlencoded,text/javascript
accept-encoding gzip,deflate
user-agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; QQDownload 598; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
host 192.168.101.72:8080
content-length 233
connection Keep-Alive
cache-control no-cache
cookie CSS=undefined; JSESSIONID=1B9AC25036290F7FB6823CCE1A24E541
可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader("x-requested-with"); 为 null,则为传统同步请求,为 XMLHttpRequest,则为 Ajax 异步请求。
ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧
使用AJAXRequest进行AJAX应用程序开发(1) - 初识AJAXRequest前言
在发布了AJAXRequest类的几个版本之后,渐渐地有许多朋友用上了它,也有许多朋友问我有没有更详细的说明和示例。不过因为时间的问题以及我能想到的示例有限,一直没有多写几个示例。考虑了一下,决定写一个关于AJAXRequest的教程,希望对使用AJAXRequest类的朋友们有所帮助。
准备
在使用AJAXRequest进行AJAX开发之前,你需要做以下准备:
准备知识:JavaScript基本语法,文档对象模型(DOM)的相关知识,以及至少掌握一种后台编程的语言(我写的例子以ASP为编程语言)。
准备工具:EditPlus或者其他文本编辑器(Dreamweaver或者Visual Web Developer也可以),以及本地测试用的Web服务器(IIS或者Apache或者NetBox或其他都可以)。
下载AJAXRequest类:你可以在http://www.xujiwei.cn/works/ajaxrequest/下载到最新版的AJAXRequest类。
要进行AJAX开发,你需要了解JS编程,这是AJAX中J的需要,以及后台编程,这是需要在服务端进行动态处理,DOM用来处理信息,将结果呈现给用户。而工具方面,文本编辑器可以选择你自己喜欢的,我比较喜欢用EditPlus。
至于测试用的Web服务器,就取决于你所用的后台编程语言了,如ASP或ASP.NET是IIS,PHP可以选择Apache等。运行ASP的另外一个选择是NetBox,不过NetBox对UTF-8支持不太好,如果不涉及非英文的输出,可以考虑选择这个轻量级的服务器软件。
至于为什么要在本地建立测试服务器而不是直接在浏览器中运行,是因为从一开始就在与服务器相近的环境中开发,可以在以后的开发过程中减少许多莫名的错误。
开始
在之后教程的例子中,我都将以JS代码与XHTML代码分开的方式来书写,其中AJAXRequest类文件ajaxrequest.js放在例子代码的同一目录下。
Hello,World!
按照惯例,以一个“Hello,World!”来开始。
helloworld.htm
程序代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="author" content="xujiwei" />
<meta name="copyright" content="www.xujiwei.cn" />
<meta name="description" content="hello,world" />
<title>Hello,World!</title>
<!-- 包含AJAXRequest类文件 -->
<script type="text/javascript" src="ajaxrequest.js"></script>
<!-- 包含页面需要的JS代码 -->
<script type="text/javascript" src="helloworld.js"></script>
</head>
<body>
<!-- 一个按钮,单击调用函数showHello,显示欢迎信息 -->
<button onclick="showHello();">显示Hello,World!</button>
</body>
</html>
在helloworld.htm中,我们在页面上放置了一个button,用于触发showHello函数,显示从服务端获取的信息。
helloworld.js
程序代码:
// 创建AJAXRequest对象,以全局变量的方式来保存这个对象,这样在整个页面应用程序中就只需要创建一次AJAXRequest类对象,而不用重复创建。
var ajax=new AJAXRequest();
/////////////////////////////////////////
// showHello
// 描述:向服务端发送请求并显示返回信息
// 参数:无
// 返回:无
/////////////////////////////////////////
function showHello() {
// 使用get方法向服务端获取文件helloworld.txt的内容,
// 并在函数mycallback中进行处理
ajax.get("helloworld.txt",mycallback);
}
/////////////////////////////////////////
// mycallback
// 描述:向服务端发送请求并显示返回信息
// 参数:obj - XMLHttpRequest对象,保存服务端返回信息
// 返回:无
/////////////////////////////////////////
function mycallback(obj) {
// 用alert来显示服务端返回的内容
// obj.responseText为helloworld.txt的内容
alert(obj.responseText);
}