`
天梯梦
  • 浏览: 13656669 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

防止伪造跨站请求

 
阅读更多

关联:

征服 Ajax 应用程序的安全威胁

AJAX 跨域请求 - JSONP获取JSON数据

 

跨站脚本

在媒体的帮助下,跨站脚本(XSS)成为了大家关注的焦点,当然它是绝对应当关注的。XSS 是 web 应用中最常见的安全隐患,许多流行的开放源代码的 PHP 应用程序受到 XSS 隐患的困扰。

XSS 攻击发生在下面的情况下:

  • 对于可获得用户信任的特定站点。

    用户没有必要用很高的等级信任任何网站,但是浏览器需要。例如,当浏览器在请求中发送 cookie,则意味着信任目标网站。对于不同的网站,用户可能有不同的浏览行为或者不同的安全防范等级。

  • 通常包含显示外部数据的网站。

    有高风险的应用包含论坛、web 邮件以及任何会显示出来的聚合内容(如 RSS feeds)。

  • 攻击者可控制的内容注入。

    当外部数据没有很好的过滤时,可能会显示攻击者需要的内容。这意味着攻击者可以更改服务器上的代码。

这是如何发生的?如果显示一个从外部获得的没有很好过滤的内容,则会产生 XSS 安全隐患。外来数据不仅限于客户端的数据。同时也包含显示在 web 邮件上的电子邮件、广告条、聚合 blog 以及类似的东西。任何从外部获得的,不在代码中的信息都是外部数据,这意味着多数数据都是外部数据。

 

 

伪造跨站请求

忽略名字上的相似程度,伪造跨站请求(CSRF)是几乎完全相反的攻击方式。XSS 是利用用户对网站的信任展开攻击;CSRF 是利用网站对用户的信任展开攻击。CSRF 攻击更加危险,更少遇到(意味着对于开发者没有更多资料),并且比起 XSS 攻击更加难以防御。

CSRF 攻击发生在下面的情况下:

  • 对于可获得网站信任的特定用户。

    多数用户可能不被信任,但是 web 应用向用户提供特定的权限以便其登录进入应用程序是很普遍的。拥有很高的特权的用户往往都是受害者(事实上在自己不知道的情况下成为了同谋)。

  • 通常网站信任用户的身份标识。用户的身份标识拥有着重要的地位。但是即便有安全的会话管理机制,CSRF 攻击仍然能够成功。而且事实上,对于这种情况 CSRF 攻击更加有效。

  • 攻击者可随心所欲的执行 HTTP 请求。

    在 CSRF 所有攻击方式中包含攻击者伪造一个看起来是其他用户发起的 HTTP 请求(事实上,跟踪一个用户发送的 HTTP 请求才是攻击者的目的)。有一部分技术可以用来完成这个,后面会演示一个使用特别技术的例子。

由于 CSRF 攻击包含伪造 HTTP 请求,熟悉底层 HTTP 协议就变得非常重要。

 

 

伪造跨站请求介绍

  伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现形式有:

  伪造链接,引诱用户点击,或是让用户在不知情的情况下访问

  伪造表单,引诱用户提交。表单可以是隐藏的,用图片或链接的形式伪装。

  比较常见而且也很廉价的防范手段是在所有可能涉及用户写操作的表单中加入一个随机且变换频繁的字符串,然后在处理表单的时候对这个字符串进行检查。这个随机字符串如果和当前用户身份相关联的话,那么攻击者伪造请求会比较麻烦。

  yahoo对付伪造跨站请求的办法是在表单里加入一个叫.crumb的随机串 ;而facebook也有类似的解决办法,它的表单里常常会有post_form_id和fb_dtsg。

 

实例:

 

 

<?php 

class Crumb {                                                                                                   
 
    CONST SALT = "your-secret-salt";                                                          
 
    static $ttl = 7200;                                                                                            
 
    static public function challenge($data) { 
        return hash_hmac('md5', $data, self::SALT); 
    }                                                                                                              
 
    static public function issueCrumb($uid, $action = -1) { 
        $i = ceil(time() / self::$ttl); 
        return substr(self::challenge($i . $action . $uid), -12, 10); 
    }                                                                                                              
 
    static public function verifyCrumb($uid, $crumb, $action = -1) { 
        $i = ceil(time() / self::$ttl);                                                                            
 
        if(substr(self::challenge($i . $action . $uid), -12, 10) == $crumb || substr(self::challenge(($i - 1) . $action . $uid), -12, 10) == $crumb) return true;                                                                                           
        return false; 
    }                                                                                                              
 
} 

$uid = 112;
if($_POST['submit'] == 'submit') echo Crumb::verifyCrumb($uid, $_POST['crumb']) ? 'good' : 'bad';

?>
<form method="post"> 
<input type="hidden" name="crumb" value="<?php echo Crumb::issueCrumb($uid)?>"> 
<input type="text" name="content"> 
<input type="submit" name="submit" value="submit"> 
</form> 

 

参考:

PHP 安全指南   http://hhacker.com/files/200709/1/index.html

PHP 安全基础        http://www.97find.cn/PHP/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Tomcat怎样防止跨站请求伪造(CSRF) 1

    Tomcat 防止跨站请求伪造(CSRF)机制浅析 在 Web 应用开发中,跨站请求伪造(CSRF)是一种常见的安全威胁。跨站请求伪造攻击是指攻击者诱骗受信任用户访问恶意网站,从而使得恶意网站能以用户身份对受信任网站执行...

    php中防止伪造跨站请求的小招式

    伪造跨站请求介绍 伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。这种攻击常见的表现形式有: 伪造链接,引诱用户点击,或是让用户在不知情的情况下访问 伪造...

    php安全开发 添加随机字符串验证,防止伪造跨站请求

    伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。那怎么防范伪造跨站攻击呢

    【ASP.NET编程知识】浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法.docx

    浅谈 ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法 本文档对 ASP.NET MVC 中防止跨站请求伪造(CSRF)攻击的实现方法进行了详细的探讨。首先,文章介绍了 CSRF 攻击的定义和历史,然后通过一个模拟的示例,...

    强大的防御跨站点请求伪造.pdf

    配套博客:https://blog.csdn.net/qq_41739364/article/details/96846943

    php漏洞之跨网站请求伪造与防止伪造方法

    今天我来给大家介绍在php中跨网站请求伪造的实现方法与最后我们些常用的防止伪造的具体操作方法,有需要了解的朋友可进入参考

    防跨站伪造测试代码

    防跨站伪造测试代码,全套代码,保证实现源码

    经典:《网站系统安全开发手册》

    如何防止跨站请求伪造 第六节 越权操作 什么是越权操作 越权操作的危害 如何防止越权操作 第七节 IO操作安全 第八节 缓存泄漏 什么是缓存泄漏 防御方法 第九节 系统加密 主要防御方式 第十节 信息泄露 第十一...

    mod_csrf:防止跨站点请求伪造的 Apache 模块。-开源

    mod_csrf 是 Apache Web 服务器的模块。 它可以防止对易受攻击的 HTML 表单进行跨站点请求伪造攻击。

    浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法

    下面小编就为大家分享一篇浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Web应用常见漏洞修复方案

    在 Web 应用程序中,安全漏洞是非常普遍的存在,而 SQL 注入攻击、跨站脚本攻击和跨站请求伪造是最常见的三种漏洞,本篇文章将详细介绍这三种漏洞的成因、危害和防护措施。 一、SQL 注入攻击 SQL 注入攻击是指攻击...

    electrode-csrf-jwt:使用JWT的无状态跨站点请求伪造(CSRF)保护

    为了防止这种情况,此模块使用的技术类似于CSRF ,并且依赖于浏览器的以下两个限制: 跨站点脚本无法读取/修改Cookie。 跨站点脚本无法设置标题。 依赖于以下事实:cookie中的唯一令牌必须与隐藏在表单提交字段中的...

    Web前端安全问题及对策.pdf

    Web前端安全问题是指在Web前端中存在的安全隐患,包括跨站点脚本攻击、跨站请求伪造、界面操作劫持等问题,这些问题可能会导致用户敏感数据的丢失、财产损失、网站崩溃等严重后果。因此,Web开发人员必须采取相应的...

    Django进阶之CSRF的解决

    django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。 全局: 中间件 django.middleware.csrf....

    防止MVC应用程序受到跨站点请求伪造攻击

    保护MVC应用程序的第一步

    Java 安全编码.pdf

    防止跨站请求伪造攻击的方法: * 输入验证:对用户输入的数据进行严格的验证,以防止恶意的请求被 inject。 * Token 验证:使用 Token 验证机制来防止恶意的请求被执行。 7. 访问控制 访问控制是一种重要的安全...

Global site tag (gtag.js) - Google Analytics