安全相关的问题、CSRF攻击、怎么确保数据传输中的安全性?

CSRF攻击

  又叫“跨站请求伪造”。可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

  下图简单阐述了CSRF攻击的思想:

  1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登陆网站A;

  2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登陆网站A成功,可以正常发送请求到网站A;

  3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

  4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

从图上可以看出,要完成一次CSRF攻击,受害者必须一次完成两个步骤:

  1、登陆受信任网站A,并在本地生成Cookie。

  2、在不退出A的情况下,访问危险网站B。

示例:

  银行网站A,它以GET请求来完成银行转账的操作。如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

  危险网站B,它里面有一段HTML的代码如下:

    <img src=http://www.mybank.com/Transfer.php?toBankId=11&&money=1000>

  首先,你登陆了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块。

  为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B之前,你已经登陆了银行网站A,而B中的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你银行网站A的Cookie发出GET请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作。

防御方法

  1、CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时要及时清除认证cookie。

  2、在客户端页面增加伪随机数。在所有POST方法提交的数据中提供一个不可预测的参数,比如一个随机数或者一个根据时间计算的HASH值,并且在cookie中也同样保存这个参数值(保证两者值一致)。把这个参数嵌入标签保存在FORM表单中,当浏览器提交POST请求到服务器端时,从POST数据中取出这个参数并且和Cookie中的值作比较, 如果两个值相等则认为请求有效,不相等则拒绝。根据同源策略和Cookie的安全策略,第三方网页是无法取得Cookie中的参数值的。所以它不能构造出相同随即参数的POST请求。

    <?php

      //构造加密的Cookie信息

      $value = "DefenseSCRF";

      setcookie("cookie",$value,time()+3600);

    ?>

在表单里增加Hash值,已认证这确实是用户发送的请求。

 1 <?
 2     $hash = md5($_COOKIE[‘cookie‘]);
 3 ?>
 4 <form method="POST" action="transfer.php">
 5     <input type="text" name="toBankId">
 6     <input type="text" name="money">
 7     <input type="hidden" name="hash" value="<?=$hash;?>">
 8     <input type="submit" name="submit" value="Submit">
 9 </form>
10 //然后在服务器端进行Hash值验证
11 <?php
12     if(isset($_POST[‘check‘])){
13         $hash=md5($_COOKIE[‘cookie‘]);
14         if($_POST[‘check‘] == $hash){
15             doJob();
16         }else{
17             //...
18         }
19     }else{
20         //...
21     }
22 ?>

  3、图片验证码

怎么确保数据传输过程中的安全性?

1、数据加密

  1.1、单向散列算法:MD5、SHA1

  MD5是单向散列算法,可用来校验数据的完整性。

  功能:

    输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);

    不同的输入得到不同的结果(唯一性);

    根据128位的输出结果不可能反推出输入信息(不可逆);

  用途:

    1)防止被篡改,比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布有安装文件得到的MD5输出结果。

    2)防止直接看到明文,现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。

    3)防止抵赖(数字签名),例如A写了一个文件,认证机构对此文件用MD5 算法产生摘要信息并做好记录。这样可以防止出现以后A不承认此事而带来的麻烦。

  1.2、对称加密算法:DES、AES、RC4。

    对称加密,就是加密和解密都使用同一个密钥,这种方式优点就是速度快,缺点就是在管理和分配密钥时不安全。

    AES:高级加密标准,是下一代的加密算法标准,速度快,安全级别高。

  1.3、非对称加密算法:RSA,DSA。

    非对成加密有一个密钥对,叫做公钥和私钥。私钥自己持有,公钥可以公开的发送给使用人。使用公钥进行加密的信息,只有和其配对的私钥可以解开。非对成加密的优点是安全,因为它不需要把私钥暴露出去。

那在真正使用的时候,要怎样进行数据的传输?

  在正式的使用场景中一般都是对称加密和非对成加密结合使用,使用非对成加密完成密钥的传递,然后使用对称加密进行数据加密和解密,HTTP传输在建立连接时使用的是非对成加密,一旦连接建立完成,有后续的通讯则使用了对称加密,这样做的好处是有利于数据传输效率。

原文地址:https://www.cnblogs.com/HuiH/p/12607030.html

时间: 2024-10-10 04:07:34

安全相关的问题、CSRF攻击、怎么确保数据传输中的安全性?的相关文章

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括浏览器要发送的关键数据等内容都在Html内容里面,听起来不错,但是假如我们仿造类似的Html内容,更改里面关键数据,在浏览器运行起来会怎么样呢?好下面我们就做这样一个例子.       CSRF攻击例子 首先我们拿以前做好的person/edit作为例子 先看控制器代码 //初始页面        

CSRF攻击详解

CSRF是什么 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF CSRF可以做什么 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. CSRF漏洞现状 CSRF这种攻击方式在200

浅谈CSRF攻击方式

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

CSRF攻击原理以及防御

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

CSRF攻击的应对之道

CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保 护之下的操作,有很大的危害性.然而,该攻击方式并不为大家所熟知,很多网站都有 CSRF 的安全漏洞.本文首先介绍 CSRF 的基本原理与其危害性,然后就目前常用的几种防御方法进行分析,比较其优劣.最后,本文将以实例展示如何在网站中防御 CSRF 的攻击,并分享一些开发过程中的最佳实践.

CSRF攻击详解(转)

原文:http://www.django-china.cn/topic/580/ 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账...

CSRF 攻击的应对之道

转载自imb文库 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性.然而,该攻击方式并不为大家所熟知,很多网站都有 CSRF 的安全漏洞.本文首先介绍 CSRF 的基本原理与其危害性,然后就目前常用的几种防御方法进行分析,比较其优劣.最后,本文将以实例展示如何在网站中防御 CSRF 的攻击,并分享一些开发过程

安全性测试--CSRF攻击

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于**商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

浅谈CSRF攻击方式(转)

add by zhj: 在看Django开发的应用时,看到了CSRF,然后搜到了这篇文章,讲的不错.其实CSRF 攻击也蛮简单的.当你登陆网站A后,会在本地存有cookie,在cookie没有过期的情况下,你又去访问 网站B,而网站B的js中包含发给A的http请求(即http的域名是A),因为这个请求的域名是A,所以会 携带你的对于A域名的cookie,这样就在你不知情的情况下完成了一次操作. 原文:http://www.cnblogs.com/hyddd/archive/2009/04/09