GVKun编程网logo

X-Requested-With标头服务器是否足以防止Ajax驱动的应用程序受到CSRF的攻击?

8

如果您对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的攻击?

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请求

ajax – $routeProvider:使用X-Requested-With标头的templateUrl请求

jQuery.ajax()通常会发送一个X-Requested-With标头,并将 XMLHttpRequest设置为内容.在服务器( PHP)中,我通常通过测试来检测:

$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 – 头删除的讨论.

FreeNode的 #angularjs中Zerot的帽子提示
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”(小写)

ajax – 在IE中,jquery的“X-Requested-With”标题变为“x-requested-with”(小写)

为什么要转换成小写?
在Firefox中,它是:“X-Requested-With”.
而在IE中,它是:“x请求 – 与”
HTTP方法应该是区分大小写的,但HTTP标头应该是不区分大小写的,根据 RFC 2616.

Ajax 请求的http头信息特点 x-requested-with

Ajax 请求的http头信息特点 x-requested-with

很多用到AJAX请求,如何区别一个请求是传统的HTTP请求?还是Ajax请求?网上有很多,这里记录一下,方便以后直接查看,懒人计划,

关键是看http请求头(header)信息中的 x-requested-with 信息项是否有无,如果无该头信息项,取出的是未定义的值,即null,则说明是传统请求;如果存在该头信息项,值是XMLHttpRequest 则说明是Ajax请求;


在JAVA WEB项目,比如在Server端的JSP中判断如下:

if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { out.print("该请求是 AJAX 异步HTTP请求。"); }else{ out.print("该请求是传统的 同步HTTP请求。"); }

转自:http://blog.csdn.net/shenzhennba/article/details/9235373


引用
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步):

  两种请求在请求的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 异步请求。


引用
x-requested-with XMLHttpRequest是Ajax 异步请求方式 使用 request.getHeader("x-requested-with"); 为 null,则为传统同步请求; 为 XMLHttpRequest,则为 Ajax 异步请求。
转自:http://bbs.csdn.net/topics/370168085

ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行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); 


在helloworld.js中,创建了一个全局变量ajax,用于保存一个AJAXRequest对象,如果在有多个函数需要用到AJAXRequest时,就不需要重新创建AJAXRequest类实例,只需要直接使用ajax就行了。因为AJAXRequest类中具有连接池的特性,因此不会出现在网络延迟较大时后来的请求覆盖前面的请求的情况。

helloworld.txt

程序代码:
Hello,World!

helloworld.txt为客户端需要的内容,欢迎信息“Hello,World!”。

小结

在上面的教程中,我们写了一个小小的AJAX应用程序,用于在客户端用AJAXRequest类从服务端获取一个文本文件,并将它的内容显示出来。可以看出来,在上面的程序中,我们只是很简单的用了AJAXRequest的get方法,就完成了从服务器获取文件内容的过程。

在接下来的教程中,我们将继续学习AJAXRequest类的使用。

to be continued ...
您可能感兴趣的文章:
  • Node.js配合node-http-proxy解决本地开发ajax跨域问题
  • Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
  • node.js+Ajax实现获取HTTP服务器返回数据
  • node.js chat程序如何实现Ajax long-polling长链接刷新模式
  • javascript ajax类AJAXRequest2007-12-31 更新
  • Node.js获取前端ajax提交的request信息

今天关于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应用程序开发入门小技巧等相关知识,可以在本站进行查询。

本文标签:

上一篇使用ajax请求安全地发送密码(使用ajax请求安全地发送密码是什么)

下一篇Python json.loads显示ValueError:额外数据(python json.loads报错)