加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

浅谈PHP安详类型

发布时间:2018-10-13 08:45:06 所属栏目:业界 来源:littlepotato
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 一、媒介 php因生成支持web应用的开拓,以其简朴易学,开拓服从高而备受喜欢。使其占有了大片的市

在这个级此外CSRF裂痕中,处事端多了一句eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ]校验,ereg()函数是模式匹配,通过超全局数组获取了哀求头referer值(也就是会见者向host提倡哀求时地址的页面)和host值,而且搜查host的值是否在referer中呈现。按照势力巨子

(https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name),这两个值无法以编程的方法修改,抓包除外,由于在csrf中无法通过抓取客户端的包举办修改,以是按理来说是安详的。实则否则,通过公网处事器,诱使victim会见名字包括host的html文件就可以实现绕过。

(3) High level

  1. <?php  
  2.  
  3. if( isset( $_GET[ 'Change' ] ) ) {  
  4.     // Check Anti-CSRF token  
  5.     checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );  
  6.  
  7.     // Get input  
  8.     $pass_new  = $_GET[ 'password_new' ];  
  9.     $pass_conf = $_GET[ 'password_conf' ];  
  10.  
  11.     // Do the passwords match?  
  12.     if( $pass_new == $pass_conf ) {  
  13.         // They do!  
  14.         $pass_new = mysql_real_escape_string( $pass_new );  
  15.         $pass_new = md5( $pass_new );  
  16.  
  17.         // Update the database  
  18.         $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";  
  19.         $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' );  
  20.  
  21.         // Feedback for the user  
  22.         echo "<pre>Password Changed.</pre>";  
  23.     }  
  24.     else {  
  25.         // Issue with passwords matching  
  26.         echo "<pre>Passwords did not match.</pre>";  
  27.     }  
  28.  
  29.     mysql_close();  
  30. }  
  31.  
  32. // Generate Anti-CSRF token  
  33. generateSessionToken();  
  34.  
  35. ?> 

在高级别中的代码,首要是行使了Anti-csrf机制,用户每次会见改密页面时,处事器会返回一个随机的token,向处事器提倡哀求时,必要提交token参数,而处事器在收到哀求时,会优先搜查token,只有token正确,才会处理赏罚客户端的哀求。我们可以按F12来看看这个token:

浅谈PHP安详类型

可以看到差异的用户会返回一个差异的token,这个token在hidden栏内里,这样一来,迫于同源计策,进攻者无法获取victim的token,也就无法实现CSRF进攻。可是真的无法实现吗?共同xss我们照旧可以偷取token的,可是这难度无疑增大,我们必必要有处事器的一个xss裂痕来偷取token,然后再行使CSRF。进攻本钱也增大。

(4) Impossible level

  1. <?php  
  2.  
  3. if( isset( $_GET[ 'Change' ] ) ) {  
  4.     // Check Anti-CSRF token  
  5.     checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );  
  6.  
  7.     // Get input  
  8.     $pass_curr = $_GET[ 'password_current' ];  
  9.     $pass_new  = $_GET[ 'password_new' ];  
  10.     $pass_conf = $_GET[ 'password_conf' ];  
  11.  
  12.     // Sanitise current password input  
  13.     $pass_curr = stripslashes( $pass_curr );  
  14.     $pass_curr = mysql_real_escape_string( $pass_curr );  
  15.     $pass_curr = md5( $pass_curr );  
  16.  
  17.     // Check that the current password is correct  
  18.     $data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );  
  19.     $data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );  
  20.     $data->bindParam( ':password', $pass_curr, PDO::PARAM_STR );  
  21.     $data->execute();  
  22.  
  23.     // Do both new passwords match and does the current password match the user?  
  24.     if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) {  
  25.         // It does!  
  26.         $pass_new = stripslashes( $pass_new );  
  27.         $pass_new = mysql_real_escape_string( $pass_new );  
  28.         $pass_new = md5( $pass_new );  
  29.  
  30.         // Update database with new password  
  31.         $data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' );  
  32.         $data->bindParam( ':password', $pass_new, PDO::PARAM_STR );  
  33.         $data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR );  
  34.         $data->execute();  
  35.  
  36.         // Feedback for the user  
  37.         echo "<pre>Password Changed.</pre>";  
  38.     }  
  39.     else {  
  40.         // Issue with passwords matching  
  41.         echo "<pre>Passwords did not match or current password incorrect.</pre>";  
  42.     }  
  43. }  
  44.  
  45. // Generate Anti-CSRF token  
  46. generateSessionToken();  
  47.  
  48. ?> 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读