PHP官方参考地址 https://www.php.net/manual/zh/wrappers.php 协议介绍 协议 简单介绍 file:// 访问本地文件系统 http:// 访问 HTTP(s ) 网址 ftp:// 访问 FTP(s) URLs php:// 访问各个输入/输出流(I/O streams) zlib:// 压缩流 data:// 数据(RFC 2397) glob:// 查找匹配的文件路径模式 phar:// PHP 归档 ssh2:// 安全外壳协议 2 rar:// RAR ogg:// 音频流 expect:// 处理交互式的流
未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,将导致这种坏味。 为什么要利用封装? 我们这里讨论的是:要检查的类型都封装在了层次结构中,但没有利用这一点,即使用显式类型检查,而不依赖于动态多态性。这将导致如下问题: 显式类型检查让客户程序和具体类型紧密耦合,降低了设计的可维护性。 相反,如果利用了运行时多态,完全可以避免这种问题。 未利用封装潜在的原因 以过程型思维使用面向对象语言 开发时的思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。 示例分析一 根为抽象类DataBuffer的层次结构封装了各种基本数据结构型数组,DataBuffer的子类DataBufferByte、DataBufferUShort、DataBufferInt支持相应的基本数据类型数组 这种情况反映出来的问题就是没有利用封装,已经有了层次结构,却没有予以利用。没有面向接口编程,每个地方面向的都是具体的实现类,每个地方都需要判断实例的类型才可以进行下一步的动作。
php封装的HttpClient,能实现些简单的功能。原来做过,这两天重新修改了一下。 <? php /* * Filename: httpclient.php Created on 2012-12-21 Created RobinTang To change the template for this generated file go to Window - Preferences - PHPeclipse - PHP public $host; // 主机 public $path; // 路径 public $scheme; // 协议 // Http响应 class SinHttpResponse { public $scheme; // 协议
未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,将导致这种坏味。 为什么要利用封装? 我们这里讨论的是:要检查的类型都封装在了层次结构中,但没有利用这一点,即使用显式类型检查,而不依赖于动态多态性。这将导致如下问题: 显式类型检查让客户程序和具体类型紧密耦合,降低了设计的可维护性。 相反,如果利用了运行时多态,完全可以避免这种问题。 未利用封装潜在的原因 ###以过程型思维使用面向对象语言 开发时的思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。 这种情况反映出来的问题就是没有利用封装,已经有了层次结构,却没有予以利用。没有面向接口编程,每个地方面向的都是具体的实现类,每个地方都需要判断实例的类型才可以进行下一步的动作。
使用PHP封装伪协议PHP 有很多内置 URL 风格的封装协议,这类协议与fopen()、 copy()、 file_exists()和 filesize()的文件系统函数所提供的功能类似。 php流input利用php中流的概念,将原本的include的文件流重定向到了用户可控制的输入流中命令执行(allow_url_include:on,allow_url_fopen不做要求)http: //127.0.0.1/include/03/index.php? 使用zip协议需要指定绝对路径,使用相对路径会包含失败;同时将#编码为%23data://命令执行(php版本大于等于5.2,allow_url_include:on,allow_url_fopen:on php phpinfo();?>?
php://filter: 作用:在读入或写入数据时将数据处理后再输出 格式: php://filter/read=xxx|xxx|xxx/resource=xxx php://filter/write php? 文件时默认是作为页面输出,下面伪协议将php文件的内容输出 php://filter/read=convert.base64-encode/resource=index.php //将xxxxx写入hello.txt php exit();'.$content); 这样会在文件开头加入'<?php exit();',使得后面的内容无法被执行,我们上传后的木马可能如下: <?php exit(); <? php exit;可以作为一个XML标签被string.strip_tags过滤,所以可以访问php://filter/read=string.strip_tags/resource=index.php
[Web安全]PHP伪协议 最近php伪协议的各种神奇妙用好像突然又常常提到了,php中支持的伪协议有下面这么多 复制代码 file:// — 访问本地文件系统 http:// — 访问 HTTP( 今天着重研究php:// 首先先把官方文档贴上来 http://php.net/manual/zh/wrappers.php.php 有两个比较重要的配置在php.ini中,allow_url_fopen 和allow_url_include会影响到fopen等等和include等等函数对于伪协议的支持,而allow_url_include依赖allow_url_fopen,所以allow_url_fopen php://filter 这篇文章的关键在于讨论php://filter,事实上,这也是我们常常使用的一个伪协议,在任意文件读取,甚至getshell的时候都有利用的机会。 php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。
php伪协议 什么是php伪协议 php伪协议实际上就是支持的协议与封装协议 大佬的博客 https://blog.csdn.net/Jeff_12138/article/details/124815370 什么时候使用php伪协议 文件包含时使用!!! 例如这个时候: 可能遇见的文件包含函数 data://协议 条件: allow_url_fopen:on allow_url_include:on 用法: data://text/plain, data 如果上传一个1.txt,仍然可以当作一个php文件去解析 说明 file:// — 访问本地文件系统 说明文件系统 是 PHP 使用的默认封装协议,展现了本地文件系统。 用于执行php代码 php://filter 参数详解 该协议的参数会在该协议路径上进行传递,多个参数都可以在一个路径上传递 简单点说,路径上写参数,参数加到php://filter的路径后面 示例,最常用的
PHP伪协议相关知识点在这里做个记录。 PHP常见的伪协议如下: file:// 访问本地文件系统 http:// 访问HTTP(s)网址 ftp:// 访问FTP(s)URLs php:// 访问各个输入/输出流(I/O streams) ,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resourse=index.php 上面举的常用的伪协议的用法: 1.php伪协议 用法: php://input,用于执行php代码,需要post请求提交数据。 php://filter,用于读取源码,get提交参数。 ? 、data协议 用法: data://text/plain,xxxx(要执行的php代码) data://text/plain;base64,xxxx(base64编码后的数据) 例: ?
近期看到了很多大佬的面经,都问到了gopher扩展攻击面的知识,之前使用gopher利用过ssrf漏洞,但也仅仅停留在会用,并不是很了解,(今天挂着网课来总结一下),也算是逃课专业户了。 查看下curl版本,看看支不支持gopher协议 gopher协议传递HTTP的GET请求 gopher在发送请求时候,必须进行URL编码 我本地准备PHP代码如下 <? php echo $_GET['name']; ?> http访问并抓包 get型的http数据包如下 GET /testg.php? php echo $_POST['name']; ?> 我们用gopher协议传递POST请求时,必须要包含这四个,还有一个post传参。 SSRF攻击 这里找了一道ctfshow上面的题目,在有SSRF漏洞的场景下,利用gopher解题。
PHP 伪协议是一种特殊的 URL 格式,允许在 PHP 脚本中以文件路径的方式访问各种资源,包括文件系统、网络资源、PHP 内置函数等。 这种协议通常以 php:// 开头,后跟特定的标识符来指示要执行的操作。 以下是一些常见的 PHP 伪协议及其功能: php://stdin, php://stdout, php://stderr: 允许在命令行模式下访问标准输入、标准输出和标准错误流。 php://temp: 提供一个临时的数据流,数据会存储在内存中。 php://memory: 类似于 php://temp,但数据会存储在内存中,而不是临时文件。 使用这些伪协议,可以在 PHP 中轻松地读取、写入各种数据源,而无需依赖于特定的文件系统路径或网络资源路径。
data://协议能够让用户控制输入输出流,配和包含函数可以将用户输入的数据作为php文件执行,例如下面这个php文件: <? php $file = $_GET['file']; include($file); ?> 当访问'?file=data://text/plain,<?php phpinfo();? php phpinfo();?>'的内容。 还可以使用编码进行绕过:'?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+'。
对于导入导出各个项目中差点儿都会用到,记得在高校平台中封装过导入导出这部分今天看了看是利用JXL封装的而经理说让我用POI写写导出,这两个导入导出框架是眼下比較流程和经常使用的框架 写了写代码认为导入导出这一块底层都是一样的,差点儿全部的框架和别的牛人也好都是底层利用POI或JXL实现,比的是谁对这部分封装的好并且每一个项目中对导入导出详细的细节是不同的,因此,有必要了解了解怎么样操作 封装这部分我看看了看大的论坛上面,几年曾经甚至十几年前别人就写出了封装非常好的工具类,作为我们假设从头開始去写就太傻了。 以下是一个导出的封装的简单工具类,临时支持单表导出封装还在继续中,认为思路不错,我们还能够把控制excel的样式、合并单元格、表头、字体等封装起来单独控制,工具类嘛我们须要的功能都能够往里面放。 也能够利用封装类写一个带窗体的小程序,能够从数据库表中导出到excel,这种小工具应该也好实现。
<html>
<head>
<meta charset="UTF-8"/>
<title>文件上传</title></head><body><form action="do.<em>php</em> "file" name="file" value="">
<input type="submit" value="上传文件"/>
</form></body></html>
二、php php/**
* Created by PhpStorm.
* User: Lee
* Date: 2020/8/13
* Time: 14:02 */include_once ". /Upload.php";$upload = new Upload();if (! php/**
* Created by PhpStorm.
php /** auther soulence 调用数据类文件 modify 2015/06/12 */ class DBConnect { private $dbname = null; private arr_data[$i]); $res[] = $this->queryCommon($arr_data[$i],$val,$one); $i++; } return $res; } /** 分页封装 checkParams($sql,$data) === false) return false; return $this->pdoExecSq($sql,$data,[1,$one]); } /** 分页封装
releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip 查看 http://localhost:9200/_cat/plugins 测试: 使用php SDK操作ElasticSearch 安装官方sdk https://github.com/elastic/elasticsearch-php 实例参考:https://github.com/ShyZhen php /** * Created by huaixiu.zhen@gmail.com * http://litblc.com * User: huaixiu.zhen * Date: 2018 $response; } } postman测试结果 这里只给出get和search的截图 获取doc 搜索doc 后记 我认为学习一门新技术,必须从他的源出发,如果一开始就使用各路大神封装好的插件的话 ,那应该挺无聊,也得不到进步,类似scout那样都封装成了一个样子,对使用很友好,但是对学习技术是不利的。
关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS 面向协议方式封装空白页功能】,这里就不再赘述,我们直接进入使用阶段吧。 本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~ 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程 switchFullScreen的调用者为UIView时,如果specifiedView为nil会自动填写,superView也是如此 switchFullScreen方法不推荐直接使用,不过当遵守协议者为 = nil ) 以上两个方法是对switchFullScreen的抽离,使调用时对参数的传递更加清晰 1、遵守协议 FullScreenable class LXFFullScreenView: ,除了本文提及的全屏旋转功能外还有其它实用功能的封装,具体内容可以到 Wiki首页 查找。
redis通信协议 redis通信协议由tcp协议进行数据交互,默认端口为6379 请求 Redis 服务器接受命令以及命令的参数。 $<参数 N 的字节数量> CRLF <参数 N 的数据> CRLF 命令本身也作为协议的其中一个参数来发送。 *1后面跟着*2,或者可能*2后面跟着*2,代表这个回复,有2条回复,并且回复里面也有2条回复 2:$0代表着空字符串 3:$-1代表着null php实现 本人使用swoole client协程客户端 https://blog.csdn.net/tanswer_/article/details/80846757文章 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn linux安装php memcache扩展
require_once()、highlight_file() show_source() 、readfile() 、file_get_contents() 、fopen() 、file() 有哪些伪协议 page=php://filter/read=convert.base64-encode/resource=/flag.php file://协议 (读文件) 用于访问本地文件系统,不受allow_url_fopen 代码执行 php://input 可以用来生成一句话木马 利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码: data://协议 (写入 ) 自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,不需要指定后缀名 如果网站允许我们上传压缩文件,我们也可以将php文件压缩后进行上传,再通过zip://协议执行。
伪协议 基于函数include()和include_once()两个的利用情况 有如下的协议: file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 ,这里要感谢各大搜索引擎和部分博主,包括但不限于FREEBUF,Q1n6,ChaBug等 ---- 0x01 利用条件 协议 利用条件 说明 用法 file:// allow_url_fopen和allow_url_include > , 或者 data:text/plain;base64,PD9waHAgcGhwaW5mbygpPw4= 同样以string可写入php代码,并执行 ---- 0x02 大杂烩 利用zip或phar 伪协议读取压缩包中的文件 /about.php? file=php://filter/resource=phpinfo.txt 4.php://input 协议 此协议需要allow_url_include=On; 访问:http://www.test.com