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 相关文章推荐
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
php一个找二层目录的小东东
Aug 02 PHP
php生成二维码的几种方式整理及使用实例
Jun 03 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
php实现json编码的方法
Jul 30 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
YII框架模块化处理操作示例
Apr 26 PHP
Laravel使用原生sql语句并调用的方法
Oct 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
PHP中读写文件实现代码
2011/10/20 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
php 可变函数使用小结
2018/06/12 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
解密效果
2006/06/23 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
JS中的三个循环小结
2017/06/20 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
python基于socket实现网络广播的方法
2015/04/29 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
机电一体化求职信
2014/03/10 职场文书
股东协议书
2014/04/14 职场文书
2014年安全生产责任书
2014/07/22 职场文书
信用卡工资证明格式
2014/09/13 职场文书
优秀护士事迹材料
2014/12/25 职场文书
团员个人年度总结
2015/02/26 职场文书