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常用函数小技巧
Sep 11 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php实现jQuery扩展函数
Oct 30 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 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
图书管理程序(一)
2006/10/09 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
Javascript UrlDecode函数代码
2010/01/09 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
Python二分法搜索算法实例分析
2015/05/11 Python
python返回昨天日期的方法
2015/05/13 Python
Python中tell()方法的使用详解
2015/05/24 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
财务支持类个人的自我评价
2014/02/14 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
留学推荐信英文范文
2015/03/26 职场文书
安全承诺书格式范本
2015/04/28 职场文书
驻村工作简报
2015/07/20 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python