PHP网站设计中信息安全防御的分析
罗有明 2011-09-16
摘要:网络具有开放性和共享性的特点,在给人们的生活带来便利的同时,也对网络用户的信息安全带来了威胁。本文研究了在PHP网站开发过程中信息安全防御技术,列举在PHP网站开发时容易出现的安全漏洞以及这些漏洞带来的危害,同时还介绍了黑客常用的攻击手段并给出相应的解决方案。
关键词:安全防御;PHP;网站
0引言
当前网络与信息安全产业已成为对各国的国家安全、政治稳定、经济发展、社会生活、健康文化等方方面面具有生存性和保障性支撑作用的关键产业。网络与信息安全可能会影响个人的工作、生活,甚至会影响国家经济发展、社会稳定、国防安全。因此,网络与信息安全产业在整个产业布局乃至国家战略格局中具有举足轻重的地位和作用。本文对PHP网站设计中信息安全防御的研究具有重要的意义。
1PHP编码过程中的安全问题及其防范
服务器和PHP的运行环境配置好后,并不意味着网络应用就安全了,程序员的安全意识也起着决定性的作用。如果程序员的安全意识不高,对用户的所有输入都没有进行安全验证,那么,所有有害的指令都将作为合法指令被执行。
1.1SQL注入的防范
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使得用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
1)经典的'or 1=1' 注入
‘or 1=1’注入是非常经典的注入语句,一般用在登录系统时绕过密码验证,以任意用户名登入。其原理是利用程序员在编写验证程序的时候没有验证用户的输入是否含有非预期的字符串,直接传递给mysql_query()函数执行,or 1=1使得无论密码是否匹配保证验证语句为真,达到绕过密码验证的目的
2)利用union语句的注入
Union 语句是利用其特性,使程序默认的语句出错,让程序执行union之后自己构造的SQL语句,达到注入的目的。
3)防SQL注入的通用解决方案
注入的手段是多种多样,十分灵活的,但有一个共同点,都是利用没有对输入进行过滤。防止注入的方法也就是对传递给查询语句的参数进行过滤。
该函数是通过正则表达式匹配常用的注入语句,并对其进行过滤。采用该过滤函数后,使用上述方法再次进行注入时,全部失效。
1.2XSS跨站攻击
XSS 全称为Cross Site Scripting,由于 CSS 已经用作样式表的简称,故称为XSS。 XSS是一种常见的网站攻击的手段。其原理与SQL注入比较类似,只不过利用的HTML标签中注入JavaScript脚本,通过在网页的输入框输入一些恶意的内容,通常是 JavaScript 脚本片段达到注入的目的,这些恶意输入在提交之后并重新读回到客户端时,浏览器会解释执行这些恶意的脚本内容,从而影响网页的正常显示。
1)XSS探测
在判断一个网站是否存在XSS漏洞是,经常用到下面这条语句进行探测:
在输入框中输入该语句找到该语句执行的地方看是否有弹窗,如果有,则表示这个网站存在XSS漏洞,这里以留言本为例。
登入留言页面,在输入框内输入检测代码,刷新页面,发现浏览器弹出窗口,表明该留言板存在着XSS漏洞。
2)利用XSS重定向
一旦确定网站存在XSS漏洞,那么攻击手段就有很多种,将当前网页重定向到其他网页是一种比较直接的方法,黑客可以利用这种手法达到刷网站流量,或者在转向的网站上挂上木马,使访问者电脑感染木马病毒的目的,攻击代码如下:
将http://evil.org替换成想要转向的网址就达到注入的目的了。
3)利用XSS弹出其他网页
平时在浏览有些网站的时候经常会出现弹出广告的情况,黑客也会可以利用XSS攻击使正在浏览被攻击页面的用户浏览器弹出窗口,这样又可以利用弹窗来达到挂马的目的了。攻击代码如下:
该段代码是让浏览器弹出一个窗口并打开百度首页,把百度的网址换成挂马的网页,黑客的攻击目的就达到了。
4)利用<iframe>标签进行XSS攻击
<iframe>是一个非常常用的HTML标签,他的功能是在网页中嵌入其他网页,可 以通过height属性和src指定嵌入页面的高度和地址。黑客可以将高度设为0,将页面地址设置为被挂马的网页,或者利用cookie的同源特性窃取cookie。
攻击代码如下:
2安全防御常用方法
2.1平衡风险与可用性
尽量使安全措施对用户透明,使他们感受不到它的存在。如果实在不可能,就尽量采用用户比较常见和熟悉的方式来进行。例如,在用户访问受控信息或服务前让他们输入用户名和密码就是一种比较好的方式。
2.2跟踪数据
作为一个有安全意识的开发者,最重要的一件事就是随时跟踪数据。不只是要知道它是什么和它在哪里,还要知道它从哪里来,要到哪里去。有时候要做到这些是困难的,特别是当你对WEB的运做原理没有深入理解时。这也就是为什么尽管有些开发者在其它开发环境中很有经验,但他对WEB不是很有经验时,经常会犯错并制造安全漏洞。
2.3过滤输入
过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,你可以避免被污染(未过滤)数据在你的程序中被误信及误用。大多数流行的PHP应用的漏洞最终都是因为没有对输入进行恰当过滤造成的。
3小结
本文主要研究了在PHP网站代码编写过程中应该注意的一些与安全相关的要点以及一些应该遵守的方法,掌握了这些方法,对PHP网站安全有很大的好处,希望对同行能有一定的参考作用。
[1] Stuttard.D,Pinto.M,石华耀译.黑客攻防技术宝典[M].北京: 人民邮电出版社,2009.
[2] 周绯菲,何文.计算机网络安全技术实验教程.北京: 邮电大学出版社,2009.
[3] Stuart McClure,Joel Scambray,George Kurtz,钟向群译.黑客大曝光:网络安全机密与解决方案[M].北京: 清华大学出版社, 2010.
[4] 温施耐德.PHP和MySQL Web应用开发核心技术.北京: 机械工业出版社, 2006.
[5] Chris Shiflett. Essential PHP Security. O'Reilly Media, 2005.