为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范。开发团队根据自己的实际情况,可以对本规范进行补充或裁减。
技术部php开发规范将参照PEAR的规范,基本采用PEAR指定的规范,在其基础上增加、修改或删除部分适合具体开发环境的规范。本规范只针对PHP开发过程中编码的规范,对于PHP开发项目中文件、目录、数据库等方面的规范,将不重点涉及。
本规范包含了PHP开发时程序编码中命名规范、代码缩进规则、控制结构、函数调用、函数定义、注释、包含代码、PHP标记、文件头的注释块、CVS标记、URL样例、常量命名等方面的规则。
当我们尝试编码时,很多时候不知道如何去让自己的代码变得安全一点,因为我们缺乏安全常识,安全常识的规范可以帮你杜绝一些日常的菜鸟黑客的攻击,却不能阻止骨灰级专家们的凌厉攻势,所以更高深的安全我们还得从其他途径学习。
PHP文件的包含在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
提取出来具有通用函数的包含文件,文件后缀以.inc来命名,表明这是一个包含文件。
如果有多个.inc文件需要包含多页面,请把所有.inc文件封装在一个文件里面,具体到页面只需要包换一个.inc文件就可以了。如:xxx_session.inc、xxx_comm.inc、xxx_setting.inf、myssql_db.inc。
把以上文件以以下方式,封装在xxx.basic.inc文件里面:
require_once('xxx_session.inc');
require_once('xxx_comm.inc');
require_once('xxx_setting.inc');
require_once('mysql_db.inc');
注意: 是否需要封装到一个文件,视情况而定,如果每个inc的功能是分散到不同的页面使用的话,就不建议封装。
一般包含文件不需要直接暴露给用户,所以应该放在 Web Server 访问不到的目录,避免因为配置问题而泄露设置信息。
检查是否做了HTML代码的过滤
可能出现的问题:如果有人输入恶意的HTML代码,会导致窃取cookie, 产生恶意登录表单,和破坏网站。
检查变量做数据库操作之前是否做了escape
可能出现的问题:如果一个要写入查询语句的字符串变量包含了某些特殊的字符,比如引号(’,")或者分号( 可能造成执行了预期之外的操作。
建议采用的方法:使用mysql_escape_string()或实现类似功能的函数。
检查输入数值的合法性
可能出现的问题:异常的数值会造成问题。如果对输入的数值不做检查会造成不合法的或者错误的数据存入UDB、存入其它的数据库或者导致意料之外的程序操作发生。
核实对cookie的使用以及对用户数据的处理
可能出现的问题:不正确的cookie使用可能造成用户数据泄漏。
访问控制
对内部使用的产品或者供合作方使用的产品,要考虑增加访问控制。
logs
确保用户的保密信息没有记在log中(例如:用户的密码);
确保对关键的用户操作保存了完整的用户访问记录。
https
对敏感数据的传输要采用https。
对代码文件及代码进行规范化。
制定统一的命名规范对于项目开发来说非常重要,不但能增加程序的可读性、可移植性和可重用性,还能很好的提高项目开发的效率。
变量命名分为普通变量、静态变量、局部变量、全局变量、Session变量等方面的命名规则。
1.普通变量
普通变量命名遵循以下规则:
a.首字母小写;
b.使用驼峰命名。
例如:$baseDir、$redRosePrice等。
2.静态变量
静态变量命名遵循以下规则:
a.静态变量使用“s”开头;
b.使用驼峰命名。
例子:$sBaseDir、$sRedRosePrise等。
3.局部变量
局部变量命名遵循以下规则:
a.使用驼峰命名;
b.变量使用_开头。
例子:$_baseDir、$_redRosePrice等。
4.全局变量
不要使用global类型的全局变量!使用配置文件代替。
5.全局常量
全局变量命名遵循以下规则:
a.所有字母使用大写;
b.全局变量多个单词间使用_作为间隔。
例子:
define(‘BASE_DIR’,’/base/dir/’);
define(‘RED_ROSE_PRICE’,20.0);
6.session变量
session/cookie变量命名遵循以下规则:
a.所有字母使用大写;
b.session变量名使用S_开头,cookie变量名使用C_开头;
c.多个单词间使用_间隔。
例子:$S_BASE_DIR、$S_RED_ROSE_PRICE、$C_BASE_DIR等。
PHP中类命名遵循以下规则:
a.以大写字母开头;
b.多个单词组成的变量名,单词之间不用间隔,各个单词首字母大写。
例子:class MyClass
或 class DbOracle
等。
方法或函数命名遵循以下规则:
a.首字母小写;
b.多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。
例子:function myFunction()
或 function myDbOracle()
等。
以上为现阶段比较适用的PHP开发规范,欢迎各位参考以及给出建议。