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中定义网站根目录的常用方法
Aug 08 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php递归json类实例
Dec 02 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
PHP的静态方法与普通方法用法实例分析
Sep 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
星际争霸中的热键
2020/03/04 星际争霸
php学习 函数 课件
2008/06/15 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
php查询及多条件查询
2017/02/26 PHP
js window.print实现打印特定控件或内容
2013/09/16 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
jQuery实现延迟跳转的方法
2015/06/05 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
理解javascript async的用法
2017/08/22 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
社区工作感言
2014/02/21 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang