PHP安全基础原则与方法

原则:

1.2.1. 深度防范

深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的。

深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域。使用过备份伞的跳伞队员可以证明有冗余安全措施是多么的有价值,尽管大家永远不希望主伞失效。一个冗余的安全措施可以在主安全措施失效的潜在的起到重大作用。

回到编程领域,坚持深度防范原则要求您时刻有一个备份方案。如果一个安全措施失效了,必须有另外一个提供一些保护。例如,在用户进行重要操作前进行重新用户认证就是一个很好的习惯,尽管你的用户认证逻辑里面没有已知缺陷。如果一个未认证用户通过某种方法伪装成另一个用户,提示录入密码可以潜在地避免未认证(未验证)用户进行一些关键操作。

尽管深度防范是一个合理的原则,但是过度地增加安全措施只能增加成本和降低价值。

1.2.2. 最小权限

我过去有一辆汽车有一个佣人钥匙。这个钥匙只能用来点火,所以它不能打开车门、控制台、后备箱,它只能用来启动汽车。我可以把它给泊车员(或把它留在点火器上),我确认这个钥匙不能用于其它目的。

把一个不能打开控制台或后备箱的钥匙给泊车员是有道理的,毕竟,你可能想在这些地方保存贵重物品。但我觉得没有道理的是为什么它不能开车门。当然,这是因为我的观点是在于权限的收回。我是在想为什么泊车员被取消了开车门的权限。在编程中,这是一个很不好的观点。相反地,你应该考虑什么权限是必须的,只能给予每个人完成他本职工作所必须的尽量少的权限。

一个为什么佣人钥匙不能打开车门的理由是这个钥匙可以被复制,而这个复制的钥匙在将来可能被用于偷车。这个情况听起来不太可能发生,但这个例子说明了不必要的授权会加大你的风险,即使是增加了很小权限也会如此。风险最小化是安全程序开发的主要组成部分。

你无需去考虑一项权限被滥用的所有方法。事实上,你要预测每一个潜在攻击者的动作是几乎不可能的。

1.2.3. 简单就是美

复杂滋生错误,错误能导致安全漏洞。这个简单的事实说明了为什么简单对于一个安全的应用来说是多么重要。没有必要的复杂与没有必要的风险一样糟糕。

例如,下面的代码摘自一个最近的安全漏洞通告:

CODE:

<?php
 $search = (isset($_GET['search']) ? $_GET['search'] : '');
?>

这个流程会混淆$search变量受污染*的事实,特别是对于缺乏经验的开发者而言。上面语句等价于下面的程序:

CODE:

<?php
 $search = '';
 if (isset($_GET['search'])){
  $search = $_GET['search'];
 }
 ?>

上面的两个处理流程是完全相同的。现在请注意一下下面的语句:

$search = $_GET['search'];

使用这一语句,在不影响流程的情况下,保证了$search变量的状态维持原样,同时还可以看出它是否受污染。

* 译注:受污染变量,即在程序执行过程中,该变量的值不是由赋值语句直接指定值,而是来自其它来源,如控制台录入、数据库等。

时间: 2024-11-01 19:21:30

PHP安全基础原则与方法的相关文章

网站版面排版设计:版式设计的原则和方法

网页制作Webjx文章简介:网页版式设计的心得与方法. 掌握必要的方法 设计的时候,如果设计者随意地进行处理而不考虑当中的原则方法及对象规律的话,那么很多时候都会出现一些不太好的结果.虽然感性是一种相当重要的因素,设计中一定要带有情感,但并不代表简单地依靠情感就能做出好的设计.相反,如果设计的时候能够考虑到各方面的因素并运用恰当的方法的话,那么作品将更加得体和出色.在网页设计中,版式设计占的比重非常大,可以说版式的好坏直接决定页面的成败,也可以说它是网页视觉识别的基础.那么在具体视觉设计的时候,

版式设计有哪些原则和方法?

  在网页设计中,版式设计占的比重非常大,可以说版式的好坏直接决定页面的成败,也可以说它是网页视觉识别的基础.那么在具体视觉设计的时候,版式上有哪些原则及方法的? DJ:设计的时候,如果设计者随意地进行处理而不考虑当中的原则方法及对象规律的话,那么很多时候都会出现一些不太好的结果.虽然感性是一种相当重要的因素,设计中一定要带有情感,但并不代表简单地依靠情感就能做出好的设计.相反,如果设计的时候能够考虑到各方面的因素并运用恰当的方法的话,那么作品将更加得体和出色. 建立网格 为设计对象建立一个合适

调整Oracle应用系统性能的原则和方法

摘要:通过探讨和研究Oracle服务器和Client/Server的特点和原理,阐述了提高.调整Oracle应用系统性能的一些原则和方法. 关键词:Oracle:客户/服务器:系统全程区:网络I/O:回滚段. Oracle 数据库广泛应用在社会的各个领域,特别是在Client/Server模式的应用,但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解决这个问题,从以下几个方面:数据库服务器.网络I/O.应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统

Dojo学习笔记 3. Dojo的基础对象和方法

这里所说的基础对象和方法是指的不Require任何包就能够调用的对象和方法 匿名函数 在开始前,我想介绍一下js里的匿名函数,这个在阅读dojo的源代码的时候,会发现到处都有匿名函数 ;(function(){ alert(123); })(); //前面的分号是一个空语句,是可以不要的 匿名函数.一个匿名函数就是一个没有名字的函数. 你可以认为他们是一次性函数.当你只需要用一次某个函数时,他们就特别有用.通过使用匿名函数,没有必要把函数一直放在内存中,所以使用匿名函数更加有效率. 当然你也可以

JAVA基础培训(10),方法的Overload介绍

今天在项目里做事,中午休息时间,补上这个教程吧.这次我们看看Overload 的内容 . 测试代码 package lession10; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * 老紫竹JAVA基础培训(10),方法的Overload介绍.<br> * 匹配方式为最特殊匹配,或者叫最准确匹配<br> * 如果发现多个都有相同的匹配度,则编译报错. * *

C#基础语法:方法参数详解

这篇文章主要介绍了C#基础语法:方法参数详解,本文讲解了值参数.引用参数.输出参数.参数数组等参数类型,并分别给出代码实例,需要的朋友可以参考下     ●值参数 :一个值参数相当于一个局部变量,当使用值参数的时候,将会分配一个新的存储位置,将实参拷贝到该位置,并将该拷贝值传递给该方法.因此,值参数只能将值带进方法,但是不能带出方法,而不会影响实参的值. ●引用参数:当使用引用参数的时候,将不会分配一个新的存储位置,In other words,引用参数能将值带进方法,也能带出方法,因而会影响实

Android绘图机制(一)——自定义View的基础属性和方法

Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目前的状况吧,结束了一个项目,现在接手一个新的项目,老项目的时候自己确实花了点时间去研究,包括看一些相关的博文和数据,新项目的自定义View更多,现在大致的对自定义View有了一些了解,但是你要说我会呢?我确实还没有掌握,只不过我把 我画的一些柱形图和其他图 的想法写出来,当然,你要让我说原理我肯定说

《众妙之门——网页排版设计制胜秘诀》——第3章 设置网页字体的5 项原则和方法3.1 系统地进行网页版式设计

第3章 设置网页字体的5 项原则和方法 设置网页字体时,有一些基本的方法.指南和目的.总体来说,网页的版式应当具有可读性.易访问性.可用性和品牌特色.这四个方面相互作用,使网页设计达到与用户沟通和交互的目的. 为使网页富有表现力并给人留下深刻的印象,网页版式的设计有许多方法.让我们进一步看一些网页版式设计的原则.规则和方法-当你学习如何在网页上完成有效的字体设置时,可以把它们当作一个开端. 3.1 系统地进行网页版式设计 在网页设计中,每个版面上的元素都需要同时实现各种各样的目标.创建的每个标题

Java 基础:hashCode方法

一.前言     泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注Java 基础 + H5(学习)     其他操作系统,算法,数据结构当成课外书博览.有时候,就是那样你越是专注方面越多对自己打击越大学啥啥都不好.今天带来Java基础:hashCode方法 二.hashCode方法     hash code(散列码,也可以叫哈希码值)是对象产生的一个整型值.其生成没有规律的.二者散列码可以获取对象中的信息,转成那个对象的"相对唯一"的整型值.