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 cli 方式 在crotab中运行解决
Feb 08 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
php使用websocket示例详解
Mar 12 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
php中 $$str 中 "$$" 的详解
Jul 06 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP实现用户登录的案例代码
May 10 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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使用curl打开https网站的方法
2015/06/17 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
js选项卡的制作方法
2017/01/23 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python中join和split用法实例
2015/04/14 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Python模块future用法原理详解
2020/01/20 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
一组SQL面试题
2016/02/15 面试题
生日宴会主持词
2014/03/20 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2014年工会工作总结
2014/11/12 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
Oracle锁表解决方法的详细记录
2022/06/05 Oracle