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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
使用纯php代码实现页面伪静态的方法
Jul 25 PHP
PHP可变变量学习小结
Nov 29 PHP
php实现购物车功能(下)
Jan 05 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
php日期操作技巧小结
Jun 25 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
tp5修改(实现即点即改)
Oct 18 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 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中smarty区域循环的方法
2015/06/11 PHP
php7下的filesize函数
2019/09/30 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
《大海那边》教学反思
2014/04/09 职场文书
旅游节目策划方案
2014/05/26 职场文书
法制宣传标语集锦
2014/06/25 职场文书
现场活动策划方案
2014/08/22 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
基层党支部整改方案
2014/10/25 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
Python文件的操作示例的详细讲解
2021/04/08 Python