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来自动调用不同服务器上的flash
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
php GD绘制24小时柱状图
Jun 28 PHP
php 正则表达式小结
Aug 31 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
解析php中const与define的应用区别
Jun 18 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
php简单压缩css样式示例
Sep 22 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
js单词形式的运算符
2014/05/06 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
python中requests库session对象的妙用详解
2017/10/30 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
python上selenium的弹框操作实现
2020/07/13 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
《泉水》教学反思
2014/04/11 职场文书
商场周年庆活动方案
2014/08/19 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
人事主管岗位职责
2015/02/04 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
个人工作决心书
2015/09/22 职场文书