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 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
用户的详细注册和判断
Oct 09 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
redis 队列操作的例子(php)
Apr 12 PHP
PHP中设置时区方法小结
Jun 03 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
php文件缓存方法总结
Mar 16 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
php实现的简单多进程服务器类完整示例
Feb 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
php调用C代码的实现方法
2014/03/11 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
php无限极分类实现方法分析
2019/07/04 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python 安装移动复制第三方库操作
2020/07/13 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
土木工程毕业生自荐信
2013/11/12 职场文书
初中班主任寄语
2014/04/04 职场文书
单位绩效考核方案
2014/05/11 职场文书
领导干部保密承诺书
2014/08/30 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
组织生活会发言材料
2014/12/15 职场文书
特此通知格式
2015/04/27 职场文书
诚信教育主题班会
2015/08/13 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python