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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
xml+php动态载入与分页
Oct 09 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
功能强大的php分页函数
Jul 20 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python装饰器知识点补充
2018/05/28 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
某公司.Net方向面试题
2014/04/24 面试题
cf战队收人广告词
2014/03/14 职场文书
综合内勤岗位职责
2014/04/14 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
班主任工作实习计划
2015/01/16 职场文书
搞笑老公保证书
2015/02/26 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
导游词之千岛湖
2019/09/23 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL