laravel框架优缺点
- 设计思想比较先进,集合了php比较新的特点,以及各种各样的设计模式,Ioc模式(控制反转,有一个专门的容器来控制对象的创建,所以是控制;由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转),依赖注入模式,门面模式等。
- 强大的rest router,用简单的回调函数就可以调用,快速绑定controller和router
- 可继承的模板,简化view的开发和管理
- blade模板,渲染速度更快
- orm操作数据库
- migration,管理数据库和版本控制
- 测试功能也很强大
thinkphp框架优缺点 - 丰富的中文文档
- 适合中小项目的开发
- 上手容易,深入学习较难
- 目录结构混乱
yii框架优缺点 - 基于组件的高性能php框架,用于开发大型web应用
- view并不是理想的view,理想中的view可能只是html代码,不会涉及php代码
- 文档较少
代码安全
- 访问控制(crsf跨站点访问,参数有效性验证,)
- 防sql注入
- 松散比较符 (0==“gg” //true)
- 浮点精度
- 从源码中可以得输入一个a的参数的变量,a首先不等于QNKCDZO并且a得md5值必须等于QNKCDZO加密后的md5值。 乍一看好像不可能存在这样的值,但是这里QNKCDZO加密后的md5值为0e830400451993494058024219903391 这里是0e开头的,在进行等于比较的时候,PHP把它当作科学计数法,0的无论多少次方都是零。 所以这里利用上面的弱类型的比较的缺陷来进行解题:?a=s155964671a,不仅sha1()函数无法处理数组,这里md5()函数也有同样的问题,在处理数组的时候,都将返回NULL。
<?php
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
echo "nctf{*****************}";
} else {
echo "false!!!";
}
}
else{
echo "please input a";
}
laravel上线优化
- 优化配置加载,php artisan config:cache
- 优化路由加载,php artisan route:cache(只能缓存应用程序中基于控制器的路由)
laravel生命周期
- 入口文件。public/index.php是laravel web应用程序的请求的入口点。index.php从bootstrap/autoload.php主要加载了composer生成定义的自动加载器,从bootstap/app.php中检索laravel应用程序的实例。
- http/控制器内核。根据应用程序的请求类型将请求发送到http内核或控制器内核。http内核的handle的方法签名:接收request并返回response。
- 服务提供器。内核引导操作之一是加载应用程序的服务提供器,所有服务提供器都在config/app.php的providers数组中配置。所有提供器都会调用register方法,接着,由boot方法负责调用所有被注册提供器。
- 分配请求。引导了应用程序且注册所有的服务提供器,request请求就会被转交给路由器来进行调度。路由器将请求发送到路由或控制器或特定中间件。
面向对象:继承,封装,多态。
接口是类的原型,一个必须要遵守其实现的接口,对象则是一个类实例化后的产物。
闭包
$closure = function ($name) {
return 'Hello ' . $name;
};
echo $closure('nesfo');//Hello nesfo
var_dump(method_exists($closure, '__invoke'));//true
服务容器:我们之所以能调用$closure变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法。只要变量名后有(),PHP就会查找并调用__invoke()方法。
中间件:array_reduce