关于构建个人网站后台核心技术的研究
2010-06-05李晓飞
李晓飞
(陕西铁路工程职业技术学院 陕西 渭南714000)
随着计算机网络技术发展,Web数据库技术已成为在应用系统中应用广泛的网站架构基础技术[1-3],Web提供了与用户通信联络的有效手段,实现Web服务器与数据库系统的连接,完成数据的处理查询,用户通过操作浏览器能够查询处理所需要的各种数据[4]。而网站项目的设计和开发进入了需要强调流程和分工的时代,比如建立一个网站需要进行需求分析、可行性分析、建立模型、网站测试和维护等。只有建立规范的、有效的、健壮的开发机制,才能适应用户不断变化的需要,进而达到预期的计划目标。这里主要针对网站需要实现的功能,对其进行建模。前台信息的动态更新是通过后台获取相应的栏目信息而展示的,为了防止非法入侵者进入后台篡改前台显示信息,需要对用户登录后台所使用的用户名和密码进行加密。
1 MD5加密算法
1.1 算法原理
MD5是Web应用程序中最常用的密码加密算法[5-6]。由于MD5是不可逆的,因而经过MD5计算得到的密文不能通过逆向算法得到原文。Web应用程序中使用MD5加密文本密码就是为了防止直接获得数据库所保存的密码。攻击者不仅拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文→MD5→密文。因此,可以使用变换的MD5算法,使现成的MD5密文数据库无所作为。其常用的变换算法有:循环MD5、密文分割MD5、附加字符串干涉、大小写变换干涉、字符串次序干涉。由于网站后台使用循环MD5算法,故这里对其详细论述。
最容易理解的变换是对一个密码进行多次的MD5运算。自定义一个函数,它接受$data和$times 2个形参,前者是加密的密码,后者是重复加密的次数。实现这种变换有两种算法,分别为迭代算法和递归算法。
1.1.1 迭代算法
1.1.2 递归算法
加密后的用户名和密码的存储表如图1所示。可以看到存储表中并不是直接存储用户的用户名和密码,而是32位的乱码字符,这样即使他人非法进入数据库也无法直接得到正确的用户名和密码,从而提高了网站的安全性,为用户的信息安全提供了基本保障。
图1 用户名和密码存储表Fig.1 User names and passwords storage table
1.2 密文分割MD5
尽管用户的密码是不确定的字符串,但是只要经过一次MD5运算后就会得到一个由32个字符组成的字符串,这时再对这个定长字符串进行变换。把这段密文分割成若干段,每段都进行MD5运算,然后把这堆密文连成一个超长的字符串,最后再进行一次MD5运算,得到仍然是长度为32位的密文。
1.3 附加字符串干涉
在加密过程中,附加内容确定的字符串(比如用户名)。干涉被加密的数据,不可以用随机字串,因为这样会使原算法无法重现。这种算法可用于大量的用户密码加密,把用户名作为附加干涉字串,攻击者即使知道具体应用算法,也很难生成海量的对照表,大量破译用户密码也只能有针对性的为数不多的用户。
MD5变换算法是数之不尽的[6],甚至无须自己再创造,就用上述5种算法互相组合就可以设计上很多算法,比如说先循环加密后再分割,并在每一段上附加一个字符串再分别加密,然后变换字符大小写并颠倒字符串顺序后连成一个长字符串再进行MD5运算…… 这样就能大大地增加破译出密码原文的难度。
如果某些漏洞,比如SQL Injection或者文件系统中的数据库被下载,异致用户密码数据泄露,MD5变换算法就能大大地增加破译出密码原文的难度[7]。使网上很多的MD5原文/密文对照数据库无效攻击者用常规算法去穷举一串由变换算法得到的密文无法辨别。当然,MD5变换算法特别适合用于非开源的Web程序,虽说用在开源的程序中优势会被削弱,但是也能抑制MD5原文/密文对照数据库的作用。
然而仅仅只对用户登录所使用的用户名和密码进行加密是远远不够的,因为非法入侵者可能直接进入后台操作,这时同样无法保障用户的安全,以下针对直接进入后台操作进行研究。
2 session技术的实现
session是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。
session中注册的变量可以作为全局变量使用,这样就可以将session用于用户身份认证、程序状态记录、页面之间参数传递。实现 session需要调用 3个函数:session_start()、session_register()、session_is_registered()。 首先每个网页最开始处要调用session_start(),这样是为了启动系统的session机制;然后再登录验证界面定义一个变量如$username,然后为该变量注册 session_register('usernamepwd'),并为其赋值。在另一个界面上判断是否对该变量进行了注册,从而防止他人直接跨过登录界面进入后台操作。
2.1 session用户身份认证的具体实现
1)登录界面验证
2)其他页面
2.2 多session并发运行的实现
在编写一个进销存系统中发现需要让多个用户可以同时进入一个php应用程序,原来所设计静态的唯一的session ID导致数据混乱。因此必须动态生成一个唯一的session ID。采用php文件名+时间戳来生成唯一的session ID,这样每个session就不再混乱。其源代码如下:
用mysessionname为页面间唯一的sessionname传递变量,Mysessionname不能为session的内部变量名,因为在session开始之前就已经存在了,Mysessionname也不能用cookie方式存放,这是因为多个session肯定会覆盖掉原先的cookie文件,因此可以用隐含表单的域来保存。
3 结 论
研究构建个人网站的后台技术,应用改良的MD5算法确保了网站前台登录时的安全性,引入session机制有效防止了非法入侵者直接绕过登录界面进入后台操作的危害,从而保障了个人网站安全性。
[1]邹天思.PHP网络编程标准教程[M].北京:人民邮电出版社,2009:219-221.
[2]宫垂刚.PHP实例精通[M].北京:机械工业出版社,2009:81-84,112-113,154.
[3]贺民.PHP专业项目实例开发[M].北京:中国水利水电出版社,2003:220-221.
[4]冯燕奎.PHP4.0与MySQL动态网站编程[M].北京:清华大学出版社,2006:78-139.
[5]武欣.PHP和MySQL Web开发[M].北京:机械工业出版社,2009:100-190.
[6]魏红国.PHP+MySQL动态网站开发[M].南京:东南大学出版社,2008:120-170.
[7]刘彦博.高性能网站建设指南[M].北京:电子工业出版社,2008:56-150.