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
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
PHP正则验证Email的方法
Jun 15 PHP
php实现的简单检验登陆类
Jun 18 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
Adnroid 微信内置浏览器清除缓存
Jul 11 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 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编写简单的文章发布程序
2015/06/18 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python自定义线程类简单示例
2018/03/23 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
python基于递归解决背包问题详解
2019/07/03 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
int和Integer有什么区别
2013/05/25 面试题
学期个人工作总结
2015/02/13 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书