PHP 编程安全性小结


Posted in PHP onJanuary 08, 2010

规则 1:绝不要信任外部数据或输入

关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。

对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。

规则 2:禁用那些使安全性难以实施的 PHP 设置

已经知道了不能信任用户输入,还应该知道不应该信任机器上配置 PHP 的方式。例如,要确保禁用 register_globals。如果启用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替换同名的 GET 或 POST 字符串。通过禁用这个设置,PHP 强迫您在正确的名称空间中引用正确的变量。要使用来自表单 POST 的变量,应该引用 $_POST['variable']。这样就不会将这个特定变量误会成 cookie、会话或 GET 变量。

要 检查的第二个设置是错误报告级别。在开发期间,希望获得尽可能多的错误报告,但是在交付项目时,希望将错误记录到日志文件中,而不是显示在屏幕上。为什么 呢?因为恶意的黑客会使用错误报告信息(比如 SQL 错误)来猜测应用程序正在做什么。这种侦察可以帮助黑客突破应用程序。为了堵住这个漏洞,需要编辑 php.ini 文件,为 error_log 条目提供合适的目的地,并将 display_errors 设置为 Off。

规则 3:如果不能理解它,就不能保护它

一些开发人员使用奇怪的语法,或者将语句组织得很紧凑,形成简短但是含义模糊的代码。这种方式可能效率高,但是如果您不理解代码正在做什么,那么就无法决定如何保护它。

规则 4:“纵深防御” 是新的法宝

即使使用 PHP regex 来确保 GET 变量完全是数字的,仍然可以采取措施确保 SQL 查询使用转义的用户输入。

纵深防御不只是一种好思想,它可以确保您不会陷入严重的麻烦。

PHP 相关文章推荐
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 #PHP
PHP5.3.1 不再支持ISAPI
Jan 08 #PHP
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 #PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 #PHP
处理php自动反斜杠的函数代码
Jan 05 #PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 #PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 #PHP
You might like
虫族 Zerg 魔法科技
2020/03/14 星际争霸
十天学会php之第六天
2006/10/09 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
javascript 常用方法总结
2009/06/03 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
js实现图片360度旋转
2017/01/22 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
python 实现的车牌识别项目
2021/01/25 Python
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
班级旅游计划书
2014/05/03 职场文书
火锅店的活动方案
2014/08/15 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
教师个人考察材料
2014/12/16 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
于丹论语心得观后感
2015/06/15 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
乔迁新居祝福语
2019/11/04 职场文书
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python