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 array_slice函数的使用以及参数详解
Aug 30 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
解析ajax事件的调用顺序
Jun 17 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 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 mkdir()定义和用法
2009/01/14 PHP
php实现中文转数字
2016/02/18 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
农村党支部先进事迹
2014/01/14 职场文书
班级寄语大全
2014/04/10 职场文书
学校端午节活动方案
2014/08/23 职场文书
大学运动会通讯稿
2015/07/18 职场文书
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS