查询字符串解析到变量,首先看一下parse_str()函数:语法:parse_str(string,array)
定义和用法:
parse_str()函数把查询字符串解析到变量中。注释:
如果未设置array参数,则由该函数设置的变量将覆盖已存在的同名变量。注释:
php.ini文件中的magic_quotes_gpc设置影响该函数的输出。如果已启用,那么在parse_str()解析之前,变量会被addslashes()转换。
No.2
如何绕过waf程序规则
TL;DR,PHP将查询字符串(在URL或body中)转换为$_GET或$_POST中的数组。例如:/foo=bar变成Array([foo]=>"bar"),查询字符串解析过程使用下划线删除或替换参数名称中的某些字符。
例如/%20wenson[id%00=42]转换为Array([wenson_id]=>42)
如果遇到waf对wenson_id的值进行拦截时,怎么样使用滥用PHP查询字符串解析器来绕过WAF,可以通过以下面方式来绕过这个解析过程:
/wenson.php%20wenson[id%00=42"+AND+1=0—在PHP中,上面的示例%20wenson[id%00]中的参数名的值将存储为$_GET["wenson_id"]。
PHP需要将所有参数转换为一个有效的变量名,因此当解析查询字符串时,它主要做两件事:
删除初始空格将一些字符转换为下划线(包括空格)
通过如下所示的简单循环,您可以使用parser_str函数发现哪个字符被删除或转换为下划线:
在这里可以用foo_bar的值进行fuzz测试,“[X]foo[X]bar[X]”是[X]的标记位,对这个标记位进行测试,如果web服务器接受带点或空白的标题名称,也会发生类似的事情。
可以对fuzz测试的一些点:
接下来进行拆分,进行分析:
[1st]foo_barfoo[2nd]barfoo_bar[3rd]
可以看出foo%20bar等同于foo+bar,并且可以被解析为foobar。如果使用一个正则规则来匹配时:
可以使用下面的方式进行绕过:
/wenson**[**id=1%22+AND+1=1--'/wenson**%5b**id=1%22+AND+1=1--'/wenson_id**%00**=1%22+AND+1=1--'
如果像ModSecurity的话,使用这个规则的话SecRule!ARGS:wenson_id"@rx^[0-9]+$",以上的方式是不成功的,
所以在有时候可以这样子绕过waf:所以在绕PHP文件中,遇到类似的parse_str()函数时,可以尝试去绕过。
/test.phptt
等同于下面的URL地址:
/test.phptt=1&wenson=fsf23424234234ffsdfds
No.3
尾言
招聘启事
简历投递至strategy@dbappsecurity.com.cn
设计师(实习生)
————————
安全招聘————————公司:安恒信息岗位:Web安全安全研究员部门:战略支援部薪资:13-30K工作年限:1年+工作地点:杭州(总部)、广州、成都、上海、北京
专注渗透测试技术
全球最新网络攻击技术
END
对于一个php程序员来说,php运行环境是我们最亲密的伙伴之一,一般我们都会选择一个集成好的运行环境在我们电脑上安装。在我们职业生涯中用过许多的集成开发环境,比如:Xampp、Wamp、phpstudy、宝塔、upupw等等。今天要给大家推荐的是一款名叫Laragon的Windows中的php集成运行环境,其丰富的功能堪称php集成环境界的全家桶,下面我们一起看一看。
Laragon
Laragon专注于性能-围绕稳定性,简单性,灵活性和自由度而设计,非常适合构建和管理现代Web应用程序。
Laragon有自己的serviceorchestration异步和非阻塞管理服务,可自动创建虚拟主机,所以你会发现Laragon可以快速顺畅地运行。
Laragon对Laravel非常友好,相信不少人在windows下开发搭建laravel官方推荐的运行环境Homestead时吃过不少的亏,下载了一堆软件,安装完却搞不明白要怎么组合在一起运行起来,而Laragon完美支持laravel。
Laragon可以将PHP,Python,Node.js,Java,Golang,Ruby集于一身,支持Mariadb,MySQL,Redis,Memcached,Postgresql,Mangodb等数据库。还支持Git,Yarn,Composer,终端等等,可以说安装了laragon,开发所需要的各种软件就都安装好了,真正的开箱即用。
Laragon特性
自动创建虚拟主机(VirtualHost,Valet也有这样的功能)基于自己的需求为不同的环境设置不同的配置邮件接收和发送轻松创建框架应用,如Laravel、Symfony、WordPress、Joomla等非常方便地切换PHP、Apache、MySQL的不同版本Laragon安装
laragon官网地址:请自行搜索吧,自媒体中不让发网址链接(尴尬)。
目前的版本是4.0.14,php版本默认是7.2.11,安装完毕出现如下界面:
点击启动所有开始使用,以下是我所用环境的启动界面:
安装完毕即可投入使用,详细的使用介绍就不多赘述,试试鼠标右键点击界面,自行体会发现的乐趣。
前言
实验室的孙同学,希望自己的毕业作品是一套“通用的企业后台管理系统”,因为他经常要给客户做网站,希望能有一套工具来快速生成。
此类系统的难度是什么?
自行车的结构很简单,折叠自行车也仅仅是增加了一点复杂度。但是,如果客户要求“折叠后的自行车要装进双肩包”,你怎么办?
所以,最大的难度是:灵活、灵活、灵活;如何灵活满足各种客户的需求,是不变的追求。
什么是,通用的企业后台管理系统
很多网站的主要功能都差不多,比如:用户、新闻、产品这些,不同的网站主要是设计区别,以及少量的功能差别,尤其是对企业网站来说。
为了降低开发成本,就可以开发一套相对通用的管理系统,快速生成,也就是《内容管理系统》
什么是,内容管理系统
大到门户网站的新闻系统(比如news.163.com),小到个人博客,都是内容管理系统。
有哪些,开源的内容管理系统
开源=免费下载源代码
十几年前我用过ecms、dedecms假设网站,最高日IP近10万,说起来还有点小骄傲呢。后来在CMS爆发期,各种各样的管理系统蜂拥而出,不过我已经不怎么用此类产品了。
厉害一点的像wordpress、Joomla、Drupal等,厉害到什么程度呢?虽然wordpress是免费的,但是有些公司为它们开发插件、设计模板,能有千万级美金的收益。
内容管理系统,有什么特点
后台强大以ecms做例子,它的后台大约是这样的。
有些企业网站,做出来的网站可能是这样的(仅仅是举例,也有很多用来制作大型网站)
配置多样因为功能太多,所以需要配置大量的开关,来进行取舍。所以,越强大的CMS开关越多,专业的CMS是需要专门培训的(就好像你学office软件一样)
插件开发再好的系统也不可能兼容所有需求,尤其是内容本身的涵盖就很广。所以,好的CMS必须留有“插件”机制,允许开发人员,针对特性需求进行二次开发。就好像U盘一样,即插即用,随时可拓展功能。
模板管理因为一套CMS要胜任不同的前台需求,加之后台功能丰富无比,所以一套好的模板引擎必不可少,尤其是自定义的模板标签,这样才能实现千变万化的数据调用。
当然,不要一口吃个胖子
作为实验室的萌新,想一下完成这样的内容管理系统,过于苛刻了。我们可以分成多个版本来实现。
基本功能管理员模块配置模块用户模块内容模块
这是最基础的,有了这几个模块,就可以实现一些基本需求了,至少做个价值千元的企业网站不成问题。
插件机制因为需求千变万化,所以应尽快完成“插件”功能,将一些非核心功能以插件的形式加载,避免对系统核心造成负面影响。
模板机制为了实现数据的灵活调用,提供一些模板标签吧。
不断迭代一个系统,永远没有完美的时候,如何保持轻盈又能灵活完成需求,是开发团队需要不断思考的。
总结
内容管理系统,作为一个“万金油”,还蛮适合作为新人的入门之作的,从简单到复杂。
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
一、安装ThinkPHP5
安装需求:PHP版本不得小于5.4;
1、从官网进行下载安装
2、通过composer进行安装
如果还未安装composer,请先安装composer并配置环境变量
运行如下命令,进行安装:
composercreate-projecttopthink/think=5.0.*tp5--prefer-dist
3、通过git安装
3.1、运行如下命令,安装thinkphp的应用项目
安装成功后的界面:如下图所示
3.2、进入到刚才已下载的tp5目录下,运行如下命令,安装thinkphp的核心框架
如果浏览器显示如下图所示,则说明框架安装成功。
二、目录结构框架的目录结构,如下图所示:
application:应用目录
index:模块目录
index/config.php:模块配置文件
index/common.php:模块公共函数文件
index/controller:控制器目录
index/model:模型目录
index/view:视图目录
config.php:应用配置文件
command.php:命令工具配置文件
common.php:应用公共函数文件
tags.php:应用行为扩展定义文件
extend:扩展类库目录
public:WEB部署目录(对外访问目录)
static:静态资源存放目录(css,js,image)
index.php:应用入口文件
.htaccess:用于apache重写
router.php:快速测试文件
runtime:应用的运行时目录
vendor:通过composer安装的第三方类库目录
thinkphp:系统核心目录
lang:系统语言包目录
library:框架核心类库目录
tpl:系统模板目录
base.php:基础定义文件
route:路由配置目录
三、ThinkPHP框架最基本的架构
thinkphp是基于MVC模式开发的,业务逻辑、数据、界面显示分离,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
1、入口文件
用户发起的请求都会经过应用的入口文件,通常是public/index.php文件。入口文件的内容如下:
在入口文件index.php中加载了基础文件base.php文件,在base.php中干了这样一些事情:
载入Loader类
注册自动加载
注册错误和异常处理机制
实现日志接口
注册类库别名
加载完基础文件之后,最后在index.php中执行应用并响应。
2、应用
ThinkPHP的应用是一个管理系统架构及生命周期的对象,由系统创建完成,应用通常在入口文件中被调用和执行,每个应用都具有自己独立的模块、config配置文件以及common公共函数文件。
3、模块
一个应用是可能是由多个模块组成的,通俗的来说,这些模块即为该应用目录下面的一个个的子目录,每个模块都有自己独立的MVC结构、config配置文件以及common公共函数文件。
注:模块名称请避免使用PHP保留关键字,否则会造成系统错误。
4、控制器
5、模型
模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。在定义模型时,要注意和表名对应,因为框架中的模型会自动对应数据库中的数据表。在ThinkPHP中模型类的命名规则是除去表前缀的数据表名称,命名方式采用的驼峰命名法,而且模型的首字母要大写。
6、视图
视图接收从控制器渲染过来的数据,将数据渲染的成用户可见的页面。
7、命名空间
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。
1.解压客户端放到一个目录下,新建tnsnames.ora放到客户端文件夹的子目录下。
2.加入以下代码:est_db是自己起的连接名字,IP替换为远程oracle的IP,service_name放数据库名字
3.开启php的oci扩展或者pdo_oci扩展,连接测试。
php7因为没有带php_oci_11g的扩展,需要自己安装获取去下载对应版本的dll文件,放到php的ext目录下,在php.ini中开启扩展。
在开启后可能会出现windows缺失oci.dll文件。
4.将上面客户端里面的oci.dll文件拷贝到php的目录下即可--》启动php,查看PHPinfo里面应该会出现如下扩展:
5.测试尝试连接数据库代码:
6.PDO方式会抛出如下的异常(SQLSTATE[]:pdo_oci_handle_factory:<
这时候如果把刚才拷贝到php目录下的文件删除的话,有些被用到肯定就不能删,经过测试,只有下面这个文件和刚才的oci.dll文件不能删除。
7.还有个特点就是很大,里面封装了很多函数扩展什么的。
现在就大功告成了,在此测试一下上面的PHP代码:
PHP一直被唱衰,特别是某一些培训机构为了推python、java等语言的培训,总是搞一些编程语言排行榜,误导编程初学者,给初学者造成PHP不行了的印象。是否PHP真的在走下坡路?PHP语言到底市场份额占有多少?
不妨根据W3Techs提供的数据和报告,看看PHP最新的使用统计和市场定位情况。W3Techs是国外一个专门调查Web技术的网站,提供有关Web各种技术的使用情况信息。
以上是W3Techs提供的2019年12月6号的统计数据。
是的,你没有看错!PHP在WEB网站服务器端使用的编程语言所占份额高达78.9%,稳居第一!将排在第二位的ASP.NET和第三位的JAVA远远甩在身后。
那有人又开始杠了,你只是统计的一个月的,不具有代表性,那我们再来看看最近一年的情况。
(WEB服务器端编程语言使用情况统计)
(折线图形式)
上图我们可以看到PHP语言在WEB服务器端语言中基本稳定保持在79%,ASP.NET有小幅度下滑,Java小幅上升。
总而言之:
PHP是世界上最好的语言,没有之一!不是梗,也不是空穴来风。PHP是免费开源的、WEB开发全球使用最多、生态最好、维护成本也是最低的一种网站服务端开发语言,所以做网站编程开发首选肯定是PHP,PHP也是学习周期最短,入门最容易的一门编程语言,不像Java、Python、.NET等需要一定的学历,另外也是最好找工作的一门语言。
我们再来看看有哪些知名的网站使用的是PHP语言。
全部使用PHP的网站
php中文网
Smzdm
Asus
Nba
Pulzo
Getpocket
Wikipedia
Vk
WordPress
Ettoday
Instructure
腾讯
新浪
百度贴吧
网易
360
宝宝树
那我们学习PHP,要学习哪个版本呢?
我们来看下具体的统计:
从图中可以看出,PHP5和PHP7是目前的主流。尤其是PHP5,大有还能再战几年的势头,至于PHP4和3可以说是已经被抛弃了。
从PHP7开始,性能更是质的提高!最新一个版本PHP7.4也在11月底公布了,具体可参考《PHP7.4.0刚刚发布!一起看看有哪些新特性》。
PHP8也即将发布,每个新版本都朝着更好的PHP迈出了又一步,届时php会走的更远!
既然您已经习惯了在您的网站上使用HTML,现在是时候处理PHP了,如果您搜索百度就会发现PHP的中文解释,其英文解释如下:
这是一种可以用来增强HTML网站的编程语言。为什么使用PHP?这里有一些很好的理由。
NowthatyouarecomfortableusingHTMLonyourwebsite,itistimetotacklePHP,aprogramminglanguageyoucanusetoenhanceyourHTMLwebsite.WhyusePHPHerearesomegreatreasons.
与HTML关系友好FriendlyWithHTML
任何已经拥有网站并且熟悉HTML的人都可以轻松地进入PHP。事实上,PHP和HTML在页面中是可互换的。您可以将PHP放在HTML外部或内部。虽然PHP为您的站点添加了新特性,但基本外观仍然是用HTML创建的。
AnyonewhoalreadyhasawebsiteandisfamiliarwithHTMLcaneasilymakethesteptoPHP.Infact,PHPandHTMLareinterchangeablewithinthepage.YoucanputPHPoutsidetheHTMLorinside.WhilePHPaddsnewfeaturestoyoursite,thebasicappearanceisstillallcreatedwithHTML.ReadmoreaboutusingPHPwithHTML.
互动功能InteractiveFeatures
PHP允许您以HTML所不能的方式与访问者交互。您可以使用它来设计简单的电子邮件表单或精心设计的购物车,以保存过去的订单并推荐类似的产品。它还可以提供交互式论坛和私有消息传递系统。
PHPallowsyoutointeractwithyourvisitorsinwaysHTMLalonecan't.Youcanuseittodesignsimpleemailformsorelaborateshoppingcartsthatsavepastordersandrecommendsimilarproducts.Itcanalsodeliverinteractiveforumsandprivatemessagingsystems.
容易学习EasytoLearn
开始使用PHP要比您想象的容易得多。通过学习一些简单的功能,你可以用你的网站做很多事情。一旦您了解了基本知识,就可以查看internet上大量可用的脚本,您只需稍微调整一下即可满足您的需求。
PHPisaloteasiertogetstartedwiththanyoumightthink.Bylearningjustafewsimplefunctions,youareabletodoalotofthingswithyourwebsite.Onceyouknowthebasics,checkoutthewealthofscriptsavailableontheinternetthatyouonlyneedtotweakslightlytofityourneeds.
一流的在线文档Top-NotchOnlineDocumentation
ThePHPdocumentationisthebestontheweb.Handsdown.Everyfunctionandmethodcallisdocumented,andmosthavetonsofexamplesyoucanstudy,alongwithcommentsfromotherusers.
低成本和开源LowCostandOpenSource
PHP在网上是完全免费的。它是全球公认的,所以你可以在所有的网站开发和设计任务中使用它。
PHPisavailableonlineabsolutelyfree.Itisacceptedgloballysoyoucanuseitonallwebsitedevelopmentanddesigntasks.
兼容的数据库CompatibleWithDatabases
通过扩展或抽象层,PHP支持包括MySql在内的各种数据库。
Withanextensionorabstractionlayer,PHPsupportsawiderangeofdatabasesincludingMySql.
它只是工作ItJustWorks
PHP比其他任何东西都更容易更快地解决问题。它是用户友好的,跨平台的,易于学习。你还需要多少理由在你的网站上尝试PHP?开始学习PHP吧。
PHPsolvesproblemseasierandfasterthanalmostanythingelseoutthere.Itisuser-friendly,cross-platformandeasytolearn.HowmanymorereasonsdoyouneedtotryPHPonyourwebsiteJuststartlearningPHP.
Go是一种功能强大的编程语言,具有独特的功能组合。而PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言,同时适用于所有微服务、小型、中型乃至大型应用程序。对于开发者而言,两者在使用过程中,有哪些不同的体验?本文即将为大家揭晓。
作者|DanGurgui
译者|弯月,责编|屠敏
16岁的时候,我发现了PHP。这是我学习的第一门编程语言。当时,我利用PHP来检查用户提交的表单并发送电子邮件,大多数表单都是“联系我们”。多年以来,我始终将PHP作为我的强项,且坚持不懈地发展壮大自己的PHP知识和技能。虽然我觉得自己算不上PHP高手,但这是我最了解的编程语言。以前,我曾有机会在小型项目中使用Ruby、Java、Python和NodeJS。我通过这些经验比较PHP和其他编程语言,了解如何更好地利用PHP的优点并克服它的缺点。
Go是一种功能强大的编程语言,具有独特的功能组合。我很遗憾没能更深入地学习Go。我返回PHP的原因与编程语言本身无关,但是,我想总结一下这6个月的经验,并比较一下这两种语言。
静态与动态
子程序与并行处理
GoLang非常神奇的功能之一就是goroutine。这个功能支持异步运行功能。PHP中没有任何功能与Goroutines的简单性和易用性相提并论。每当需要在PHP中进行并行处理时,你都需要添加外部的排队机制(Beanstalk、RabbitMQ等)。这会加剧基础架构的复杂性,并增加项目的复杂性。
GoLang的并行处理远远超越了PHP。
面向对象功能
自从编程问世以来,面向对象的概念一直拥有一席之地。90年代,面向对象在C++中得到了广泛应用,也因此成为了主流范式。面向对象最吸引我的地方在于,它允许工程师使用代码创建业务逻辑图,事实证明,当不断发展的系统发生变化时,这种做法提供的价值无可限量。PHP和GoLang都提供面向对象的功能,但是,这两种语言之间存在很大差异。
不断发展的模型具有复杂的需求,而领域驱动的设计可以满足这种需求。为此,你需要许多面向对象的功能,PHP也的确提供了许多这样的功能:trait、抽象方法和类,final方法和类,魔术方法等等。GoLang缺少这些功能,这是一个难以克服的限制条件。因此,我认为GoLang仅适用于微服务或小型应用程序,而PHP适用于所有微服务、小型、中型乃至大型应用程序。
测试
我认为,在决定项目质量方面,测试是最重要的工作:单元测试、集成测试、功能测试、UI测试、性能测试等等,项目拥有的测试越多,交付的质量就越好。GO和PHP的单元测试框架都很出色,Go拥有嵌入式测试包,而PHP有PHPUnit,它们都提供了一组丰富的功能,可用于测试你的代码。PHPUnit的功能比GoLang测试包更多,因为PHP的功能更多。这两种工具都可以完成编程语言的工作。然而,在进行高级测试时,PHP和Go就会表现出很大的不同。
首先,对于性能测试,Go的测试包中拥有很多性能测试的功能。pprof等许多库都可以使用这些功能来创建华丽的数据报告。虽然PHP也有一套可用于性能测试的库和技术,但Go的更加易于使用。我相信这是静态类型语言的优势之一。
其次,对于高级测试技术(例如BDD、TDD和A/B测试),PHP拥有更多支持、更多库,还有一个更大的社区。例如,两种语言都实现了Cucumber(或Gherkin),但是PHP的BEHAT实现支持40多种语言,是完全基于独立组件构建的,而且在GitHub上的支持比Cucumber更多(更多分支、更多给星等等)。
最后,对于功能测试或UI测试,PHP的库更多,且对现有工具的支持更好。Selenium拥有非常强大的PHP支持(3000多个跨浏览器测试、视频记录、文本和可视日志等),而对于Go来说,只有一个没有良好维护的驱动程序tebeka/selenium(最后一次提交发生在5个月前)。
其他差异
两种语言之间还有许多其他差异,重点包括:
GoLang的性能比PHP更好。我们有数百种基准,可以在各种情况下测试PHP和GoLang,但大多数时候明显都是GoLang胜出。最重要的是,Go的开发速度很快:测试运行速度更快、内存使用效率更高、CPU使用率更低。PHP社区的人数远远超过了GoLang,而且支持非常出色。我发现GoLang使用了许多糟糕的东西,例如代码生成器,这都是PHP社区几年前抛弃的东西。打包维护也很不相同。在GoLang中,打包维护是内部管理的;而PHP有两层不同的实现方式:第一,PHP扩展级别;第二,每个人都使用的库级别。PHP的情况更为复杂,而go则将两层管理放到了一起。
最后一点想法
这两种语言有明显的区别,在两者之间做选择非常容易。GoLang的性能更好,拥有原生异步功能以及其他基本功能,非常适合需要频繁使用的小型应用程序和微服务。
然而,随着应用程序的不断增长,业务逻辑复杂度加剧的情况下,PHP是很自然的选择,因为你可以充分利用PHP的面向对象功能和社区支持。
【End】
从官方说法,性能提升:PHP7比PHP5.6性能提升了两倍,而且全面支持64位,更重要是修改了之前发现的致命错误,支持更多的类扩展,满意开发的需要,所以PHP7的发布将是未来里程碑的发展。
目前新PHP网站已经不再把PHP5版本作为首先开发版本,默认开发版本页是推荐PHP7以上版本,而且有更多的旧网站已经升级到PHP7以上。