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 中的类
Oct 09 PHP
php抓即时股票信息
Oct 09 PHP
php录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
php xml 入门学习资料
Jan 01 PHP
php 归并排序 数组交集
May 10 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP中imagick函数的中文解释
Jan 21 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
php的对象传值与引用传值代码实例讲解
Feb 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
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
js读取cookie方法总结
2014/10/31 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
React 组件间的通信示例
2018/06/14 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
JS实现购物车基本功能
2020/11/08 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
Python的函数的一些高阶特性
2015/04/27 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
商务助理岗位职责
2013/11/13 职场文书
创伤外科专业推荐信范文
2013/11/19 职场文书
个人党性剖析材料
2014/02/03 职场文书
创业融资计划书
2014/04/25 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP