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

浅谈PHP安全规范

发布时间:2018-10-08 06:28:29 所属栏目:评论 来源:littlepotato
导读:副标题#e# 【新品产上线啦】51CTO播客,随时随地,碎片化学习 一、前言 php因天生支持web应用的开发,以其简单易学,开发效率高而备受喜爱。使其占据了大片的市

如果已经弃用的 register_globals 指令被设置为 on 那么局部变量也将在脚本的全局作用域中可用。例如, $_POST['foo'] 也将以 $foo 的形式存在。这将会造成一些变量覆盖,条件判断绕过。以下是简化的全局变量认证绕过模型:

  1. if(authenticated_user()){ 
  2.     $authorized=true; 
  3. if($authorized){ 
  4.     do something...... 

对于以上的绕过,我们可以有以下的规避措施:(1) php.ini register_globals=off(2) 在每次判断前初始化变量,如下:

  1. $authorized=false; 
  2.  
  3. if(authenticated_user()){ 
  4.     $authorized=true; 
  5. if($authorized){ 
  6.     do something...... 

3. php伪协议

伪协议在很多绕过场景下发挥着举足轻重的作用,如后面提到的文件包含file://协议绕过,以及最近才提出的phar协议反序列化对象注入,我们可以在不存在可控unserialization()函数的情况下利用phar反序列化对象,实现对象注入。所以在web应用中不要忽视他们的存在,千里之堤,溃于蚁穴。

  • file:///var/www/html 访问本地文件系统
  • ftp://:@ 访问FTP(s) URLs
  • data:// 数据流
  • http:// — 访问 HTTP(s) URLs
  • ftp:// — 访问 FTP(s) URLs
  • php:// — 访问各个输入/输出流
  • zlib:// — 压缩流
  • data:// — Data (RFC 2397)
  • glob:// — 查找匹配的文件路径模式
  • phar:// — PHP Archive
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — Audio streams
  • expect:// — 处理交互式的流

四、向DVWA学习php安全的代码编写

以下样例来自于DVWA v1.9版本

1. sql注入

(1) Low level

  1. <?php  
  2.  
  3. if( isset( $_REQUEST[ 'Submit' ] ) ) {  
  4.     // Get input  
  5.     $id = $_REQUEST[ 'id' ];  
  6.  
  7.     // Check database  
  8.     $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";  
  9.     $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );  
  10.  
  11.     // Get results  
  12.     $num = mysql_numrows( $result );  
  13.     $i   = 0;  
  14.     while( $i < $num ) {  
  15.         // Get values  
  16.         $first = mysql_result( $result, $i, "first_name" );  
  17.         $last  = mysql_result( $result, $i, "last_name" );  
  18.  
  19.         // Feedback for end user  
  20.         echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";  
  21.  
  22.         // Increase loop count  
  23.         $i++;  
  24.     }  
  25.  
  26.     mysql_close();  
  27. }  
  28.  
  29. ?> 

(编辑:武汉站长网)

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

热点阅读