PHP必须遵循的安全规范

1、 使用PHP变量之前,必须对PHP变量进行初始化

因为PHP使用变量时无须初始化,这就使得没有经验的程序员写出不安全的代码,特别是PHP的register_globals设置为On时,因此从 PHP » 4.2.0 版开始配置文件中 PHP 指令 register_globals 的默认值从 on 改为 off 了 
如下面这段代码:

<?php// 当用户合法的时候,赋值 $authorized = trueif (authenticated_user()) {    $authorized = true;}

// 由于并没有事先把 $authorized 初始化为 false,// 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值// 所以任何人都可以绕过身份验证if ($authorized) {    include "/highly/sensitive/data.php";}?>

实际上这里包含了第二条建议:

2、关闭PHP的register_globals,设置为Off,如果你的PHP版本 » 4.2.0,则默认是Off

时间: 2024-11-03 22:18:55

PHP必须遵循的安全规范的相关文章

我们为什么要遵循W3C标准规范

大部分的站长和拥有网站的企业负责人都会知道,每当有浏览器发布大更新的时候,我们刚建立不久的网站就会发生无法预知的严重错误,我们只能重新建立或改版网站,使其可以应归新发布的浏览器.好比1996-1999年典型的浏览器战争,为了同时兼容Netscape和Microsoft Internet Explorer,各大站点不得不为这两种浏览器写不同的兼容代码.同样的,当有新的网络技术或交互设备出现时,我们就需要开发一个新版本来支持新的技术和设备,例如目前流行的手机浏览器浏览的WPA网页.类似的问题还有很多

PSR规范

目前包括以下几个规范: PSR-0(弃用) PSR-1 PSR-2 PSR-3 PSR-4 1.PSR-0 自动加载规范,此规范已被启用-本规范已于2014年10月21日被标记为弃用,目前新的替代规范为[PSR-4] 本文是为自动加载器实现通用自动加载所需要遵循的编码规范 一个标准的命名空间与类名称的定义必须符合以下结构:\<Vendor Name><Namespace>*(ClassName) 其中Vendor Name 为每个命名空间都必须要有的一个顶级命名空间名 需要的话,每

Goldengate参数规范

1.    文档综述 1.1.  文档说明 本文档规定了在实施Goldengate时,各个进程需要配置的参数. 该参数模板适合于Goldengate11.2.1.0版本: **注:本文档为Goldengate实施规范系列文档内容之一.在Goldengate的实施过程中,需要严格遵循系列实施规范. **注:无主键,大事务,这些都是OGG支持有问题的,需要进行应用调整,否则即使按照规范执行,某些情况下也会出现问题. **注:本文档不涉及任何调优参数,如需使用性能调优参数需咨询oracle后谨慎使用.

说说Python编码规范

前言 已有近两个月没有发表过文章了,前段时间外甥和女儿过来这边渡暑假,平常晚上和周末时间都陪着她们了,趁这个周末有空,再抽空再把这块拾起来.         这么久没写了,再次拿起键盘,想想,发表些什么呢,想起上次公司的代码评审委员会下周其中一个议题是关于Python编码规范的整理,那就趁热打铁,整理一份关于Python编码规范的文章,也为那些写Python的人,提供一些编码注意的一些事项或者说是参考吧. 编码规范的作用         规范故明思义,就是通过不断的总结,吸取好的点,从而形成的一

JDBC规范(转)

公司开发一直用的是ibatis,进来心血来潮想研究一下源码,可是发现自己的JDBC似乎已经忘得差不多了,为了自己能顺利的研读ibatis的源码,于是乎找到了 XIAO_DF的JDBC规范的博客,转到自己博客方便阅读,感谢技术老铁的分享! JDBC接口规范 前言 JDBC(JavaDatabase Connectivity)表示Java查询引擎连接,由一组用Java编程语言编写的类和接口组成.JDBC为Java程序访问关系型查询引擎提供了编程接口,为查询引擎开发人员提供了一个标准的API,使他们能

Java编程规范

一.常见命名规则 (1)匈牙利命名法 比 较著名的命名规则是匈牙利命名法,但这种命名法对于跨平台移植简直是灾难.这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的.其主要思想是"在变量和函数名中加入前缀以增进人们对程序的理解".匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀:前缀 之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途.例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针

【翻译】苹果官网的命名规范之 Naming Properties and Data Types

苹果官方原文:Naming Properties and Data Types 前言:纯属练习英语和学习.翻译错误和不通顺的地方敬请谅解和指正.O(∩_∩)O 属性和数据类型的命名 本节讲述了属性定义.变量.常量.通知和异常的常用命名规范. l 定义属性和变量 一个属性定义会影响该属性的访问方法的定义.所以属性的命名规范大体上和访问器(getter,setter)的命名规范是一致的.如果一个属性是表达一个名词或者动词,那么定义如下: @property(…) type nounOrVerb 例如

关于“代码规范”,“Review”和“Check list”(续)

在前两天的    关于“代码规范”,“Review”和“Check list”    一文中,我给自己列出了Check list,如下: 1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等. 2.所有的代码是否简单易懂? 3.代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释. 4.是否存在多余的或是重复的代码? 5.代码是否尽可能的模块化了? 6.是否有可以被替换的全局变量? 7.是否有被注释掉的代码? 8.循环是否设置了长度和正确的终止条

Java中entity(实体类)的写法规范

在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法.entity(实体类)的作用一般是和数据表做映射.所以快速写出规范的entity(实体类)是java开发中一项必不可少的技能. 在项目中写实体类一般遵循下面的规范: 1.根据你的设计,定义一组你需要的私有属性. 2.根据这些属性,创建它们的setter和getter方法.(eclipse等集成开发软件可以自动生成.具体怎么生成?请自行百度.) 3.提供带参数的构造器和