`
天梯梦
  • 浏览: 13747325 次
  • 性别: 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安全开发 添加随机字符串验证,防止伪造跨站请求

    因此,防止伪造跨站请求是Web应用安全的重要一环。 为了防范CSRF攻击,一种常见的方法是使用随机字符串验证。这种技术通常涉及在表单中添加一个与用户身份相关联的、随时间变化的随机字符串,即“CSRF Token”。当...

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

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

    CSRF跨站请求伪造实例程序

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络安全威胁,攻击者通过诱导用户在不知情的情况下执行非预期的操作,如修改账户设置、进行非法转账等。在这个"CSRF跨站请求伪造实例程序"中,我们将...

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

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

    Ajax与跨站点请求伪造漏洞

    - 这种方法可以有效地防止攻击者伪造请求。 **方案二:利用Session ID验证** - 在客户端的每个关键业务请求中添加一个从Cookie中获取的Session ID参数。 - 服务器端检查此参数与实际Session ID是否一致,如果不一致...

    防跨站伪造测试代码

    在IT行业中,跨站伪造(Cross-Site Request Forgery,简称CSRF)是一种常见的网络攻击方式,它利用用户的登录状态来执行非用户意愿的操作。针对这种情况,开发人员需要采取有效的防御措施,Spring框架为此提供了内置...

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

    跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络安全漏洞,攻击者通过诱导用户在未经许可的情况下执行非预期的操作,从而达到恶意目的。在PHP开发中,了解并防止这种攻击至关重要。 首先,我们...

    CSRF跨站请求伪造CSRF PHP demo代码

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱导用户在已登录的网站上执行非预期的操作。在这个PHP demo中,我们将深入理解CSRF攻击的原理,并探讨如何防范。 首先,让我们看...

    Anchor CMS 0.12.7 跨站请求伪造 CVE-2020-23342.md

    锚点CMS 0.12.7版本中出现了一个严重的安全漏洞,即跨站请求伪造(CSRF)漏洞,其CVE编号为CVE-2020-23342。这个漏洞是公开披露的,并且可能已被安全研究人员或恶意行为者所知。 跨站请求伪造(CSRF)是一种攻击者...

    Collabtive系统跨站请求伪造攻击实验-内含源码以及设计说明书(可以自己运行复现).zip

    在这个实验中,我们将探讨一个重要的安全问题——跨站请求伪造(Cross-Site Request Forgery, CSRF)攻击,这种攻击允许恶意用户在受害者不知情的情况下,利用其浏览器发起伪造的请求。通过这个实验,你可以了解CSRF...

    74cms v5.0.1 后台跨站请求伪造漏洞 CVE-2019-11374.md

    74CMS v5.0.1后台跨站请求伪造漏洞CVE-2019-11374的详细解读如下: ### 漏洞概述 跨站请求伪造(Cross-site Request Forgery,简称CSRF)是一种常见的网络安全漏洞。该漏洞允许攻击者误导合法用户执行非预期的命令...

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

    跨站点请求伪造(Cross-Site Request Forgery,简称 CSRF 或 XSRF)是一种网络攻击方式,它利用了用户浏览器已经存储的登录凭证,如Cookie,来执行非授权的操作。这种攻击常见于Web应用中,使得攻击者能够在用户不...

    Django中如何防范CSRF跨站点请求伪造攻击的实现

    CSRF(Cross-Site Request Forgery,跨站请求伪造),是一种常见的安全攻击手段。在这种攻击中,攻击者利用受害者的身份(通常是通过受害者已登录状态下的Cookies)发起恶意请求。这些请求对于服务器而言是合法的,...

Global site tag (gtag.js) - Google Analytics