网站地图    收藏   

主页 > 后端 > 网站安全 >

web安全三——跨站请求伪造攻击(Cross Site Reque

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 1 暴力破解(Brute Force):http: www 2cto com Article 201403 284282 html2 命令注入攻击(Command Injection Execution):http: www 2cto com Article 201403 284294 htmlCSRF就是跨站请求伪造攻击,你...

1.暴力破解(Brute Force):http://www.2cto.com/Article/201403/284282.html
2.命令注入攻击(Command Injection Execution):http://www.2cto.com/Article/201403/284294.html
 
CSRF就是跨站请求伪造攻击,你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,修改你的密码,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。
 
这里以修改您的密码介绍CSRF。
 
一、先看看没有任何安全防御的代码。
 
 
 
01 
 
02 <?php 
 
03  
 
04     if (isset($_GET['Change'])) { 
 
05  
 
06         // Turn requests into variables 
 
07         $pass_new = $_GET['password_new']; 
 
08         $pass_conf = $_GET['password_conf']; 
 
09  
 
10  
 
11         if (($pass_new == $pass_conf)){ 
 
12             $pass_new = mysql_real_escape_string($pass_new); 
 
13             $pass_new = md5($pass_new); 
 
14  
 
15             $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; 
 
16             $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); 
 
17  
 
18             echo "<pre> Password Changed </pre>";         
 
19             mysql_close(); 
 
20         } 
 
21  
 
22         else{         
 
23             echo "<pre> Passwords did not match. </pre>";             
 
24         } 
 
25  
 
26     } 
 
27 ?>
 
 
 
 
 
这段代码直接将新密码写进数据库,没有验证用户的旧密码,也没有对http引用进行确认,这样任何别的网站都可以用你cookies对你的帐户进行CSRF攻击。
 
二、下面这段代码对http引用进行确认,然后再写数据库。
 
 
 
01 <?php 
 
02  
 
03     if (isset($_GET['Change'])) { 
 
04  
 
05         // Checks the http referer header 
 
06         if ( eregi ( "127.0.0.1", $_SERVER['HTTP_REFERER'] ) ){ 
 
07  
 
08             // Turn requests into variables 
 
09             $pass_new = $_GET['password_new']; 
 
10             $pass_conf = $_GET['password_conf']; 
 
11  
 
12             if ($pass_new == $pass_conf){ 
 
13                 $pass_new = mysql_real_escape_string($pass_new); 
 
14                 $pass_new = md5($pass_new); 
 
15  
 
16                 $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; 
 
17                 $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); 
 
18  
 
19                 echo "<pre> Password Changed </pre>";         
 
20                 mysql_close(); 
 
21             } 
 
22  
 
23             else{         
 
24                 echo "<pre> Passwords did not match. </pre>";             
 
25             }     
 
26  
 
27         } 
 
28  
 
29     } 
 
30 ?>
 
 
 
 
 
这段代码虽然确认了http引用,但是还是看着不爽是吧。
 
三、下面这段代码就比较爽了。
 
 
01 <?php 
 
02  
 
03     if (isset($_GET['Change'])) { 
 
04  
 
05         // Turn requests into variables 
 
06         $pass_curr = $_GET['password_current']; 
 
07         $pass_new = $_GET['password_new']; 
 
08         $pass_conf = $_GET['password_conf']; 
 
09  
 
10         // Sanitise current password input 
 
11         $pass_curr = stripslashes( $pass_curr ); 
 
12         $pass_curr = mysql_real_escape_string( $pass_curr ); 
 
13         $pass_curr = md5( $pass_curr ); 
 
14  
 
15         // Check that the current password is correct 
 
16         $qry = "SELECT password FROM `users` WHERE user='admin' AND password='$pass_curr';"; 
 
17         $result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' ); 
 
18  
 
19         if (($pass_new == $pass_conf) && ( $result && mysql_num_rows( $result ) == 1 )){ 
 
20             $pass_new = mysql_real_escape_string($pass_new); 
 
21             $pass_new = md5($pass_new); 
 
22  
 
23             $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; 
 
24             $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); 
 
25  
 
26             echo "<pre> Password Changed </pre>";         
 
27             mysql_close(); 
 
28         } 
 
29  
 
30         else{         
 
31             echo "<pre> Passwords did not match or current password incorrect. </pre>";             
 
32         } 
 
33  
 
34     } 
 
35 ?>
 
 
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论