PHP安全
发表于|更新于|PHP
|总字数:75|阅读时长:1分钟|浏览量:
永远不要相信用户传递的任何数据
| 安全问题 | 释义 | 防范 |
|---|---|---|
| SQL注入 | ||
| XSS跨站脚本攻击 | ||
| XSRF跨站请求伪造攻击 | ||
| 不充分的密码哈希 | ||
| 生产中打印错误日志 | ||
| 登录未限制 | ||
| 中间人攻击 | ||
| 命令注入 | ||
| LFI | ||
| XXE |
文章作者: Michael
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michael's Blog!
相关推荐

2021-03-20
OOP - 面向对象
一句话 OOP = 把”数据”和”操作数据的方法”封装到一起,再用继承/多态在不改旧代码的前提下扩展新行为。 它的对立面是「面向过程」(数据是数据,函数是函数)和「函数式」(数据不可变,靠函数组合)。三种范式各有适用场景,OOP 不是唯一正解。 三大特性1. 封装(Encapsulation)把内部状态藏起来,只暴露必要接口。 123456789class BankAccount { private int $balance = 0; // 外面碰不到 public function deposit(int $amount): void { if ($amount <= 0) throw new InvalidArgumentException(); $this->balance += $amount; } public function balance(): int { return $this->balance; }} ...

2021-04-18
PHP 生命周期与 SAPI
一句话 PHP 生命周期 = MINIT → RINIT → 执行 → RSHUTDOWN → MSHUTDOWN。CLI/CGI 模式每个请求跑完整 5 步;FPM 模式只跑中间 3 步(M 阶段进程启动时跑一次);Swoole/Workerman 更进一步,只跑 1 步。 五大阶段 阶段 触发时机 典型工作 MINIT (Module Init) 进程启动 加载扩展、注册类/函数/常量 RINIT (Request Init) 每个请求开始 初始化 $_GET/$_POST/$_SESSION、扩展请求级状态 Execute RINIT 之后 把 PHP 源码编译成 opcode 并执行 RSHUTDOWN 请求结束 调注册的 shutdown 函数、清理临时变量 MSHUTDOWN 进程退出 卸载扩展、释放永久内存 CLI vs FPM vs SwooleCLI(每次都完整 5 步)1php script.php 启动:MINIT → RINIT → Execute → RSHUTDOWN...

2019-03-20
PHP自动加载类机制
自动加载 在 PHP 开发过程中,如果希望从外部引入一个 class,通常会使用 include 和 require 方法,去把定义这个 class 的文件包含进来; PHP5 提供了一个类的自动装载 (autoload) 机制。 autoload 机制可以使得 PHP 程序有可能在使用类时才自动包含类文件, 而不是一开始就将所有的类文件 include 进来,这种机制也称为 lazy loading。 123function __autoload($className) { echo '__autload class:', $className, '<br />';} 123function __autoload($className) { require_once($className . "class.php"); } autoload 至少要做三件事情: 根据类名确定类文件名; 确定类文件所在的磁盘路径 在我们的例子是最简单的情况,...

2019-03-20
Yaf
一、Yaf 是什么Yaf = Yet Another Framework,作者是 Rasmus Lerdorf 的同事、PHP 核心开发者鸟哥(Xinchen Hui / Laruence)。 和其他 PHP 框架最大的不同:Yaf 是 PHP 扩展(C 写的 .so),不是 Composer 包。 框架自身不被 PHP 解释执行 → 启动 0 开销 常驻在 PHP 进程内 → 没有 autoload 成本 性能在 PHP-FPM 模式下比 Laravel/TP 快一个数量级 代价: 学习资料少(黄金时期是 2013-2017) 生态弱(没有 Eloquent 这种 ORM,要自己拼) 调试不便(C 层面问题) 适合:对性能敏感、团队 PHP 功底强、不需要花哨 ORM 的中型项目。 二、安装12345678# pecl 安装pecl install yaf# php.iniextension=yaf.soyaf.environ=productyaf.use_namespace=1yaf.use_spl_autoload=0 验证: 1p...

2019-03-20
Opcache
一、为什么需要 OPcachePHP 是脚本语言,每次请求默认都要走完整流程: 123.php 源码 → 词法分析(Lexer) → 语法分析(Parser) → 编译(Compiler) → opcode → Zend VM 执行 │ ◀──────┘ 输出结果 在没有缓存的情况下,只有最后一步是真正在做业务,前面四步每个请求都重复跑一遍 —— 极其浪费。 OPcache 把编译产物(opcode)缓存在共享内存(SHM)里,下次同一个文件请求直接从内存拿编译好的 opcode 给 Zend VM 执行,跳过前四步。 性能提升:典型业务 QPS 提升 2-3 倍,CPU 使用率显著下降。PHP 5.5 起内置,开箱可用。 二、工作原理12345678请求 1:/index.php ├─ OPcach...

2021-04-10
PHP 垃圾回收机制(GC)
一句话 PHP GC = 引用计数为主 + 循环引用收集器为辅。 引用计数归零立刻释放,解决不了的循环引用由后台收集器周期清理。 一、引用计数(refcount)PHP 的每个变量底层是 zval,里面有 refcount 和 is_ref 两个字段。 1234$a = 'hello'; // refcount = 1$b = $a; // refcount = 2 (写时复制,COW)unset($a); // refcount = 1unset($b); // refcount = 0 → 立即释放 用 xdebug_debug_zval() 或 debug_zval_refcount() 可以看到 refcount。 注意:PHP 7+ 的 zval 实现有重大改动(zval 嵌入栈、引用单独 zend_reference),但算法语义没变。 二、引用计数解决不了的:循环引用1234567891011class Node { public $next;}$a = new N...
评论
公告
欢迎来到 Michael 的博客 · 记录代码、思考与生活

