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 静态化实现代码
Mar 20 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
PHP生成器简单实例
May 13 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
PHP时间函数使用详解
Mar 21 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 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操作redis缓存方法分享
2015/06/03 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
Linux面试题LINUX系统类
2015/11/25 面试题
《鸟的天堂》教学反思
2014/02/27 职场文书
岗位说明书怎么写
2014/07/30 职场文书
机械操作工岗位职责
2014/08/08 职场文书
调研座谈会发言材料
2014/08/23 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
保护环境的宣传语
2015/07/13 职场文书