当前位置:编程学习 > 网站相关 >>

网页编程安全漏洞全接触

网络安全已经成为互联网最热门的话题之一,与现实相对应的,网络安全的部属、实现也就成为一个企业特别关心的问题。所以,现在我们可以很容易的看到各个企业在设计自己网络、构建企业网站的时候,对于网络安全的投入还是比较大方的,特别是一些敏感信息比较多的网站,比如银行、证券等企业,对于网络安全更是不遗余力,市场上各种宣传、广告,也都大力推广各种安全产品,比如防火墙、入侵检测、企业防病毒等一系列的产品。但是,是不是使用了这些产品,网络特别是网站就真的安全了?不一定,即使这些安全设备最高档、设置也很合理,网站还是有被攻击甚至完全被控制的可能。我们知道,现在的网站特别是稍微大一点的网站,一般都采用ASP、PHP或者JSP等脚本语言来连接数据库,取得数据库里面的数据生成动态网页,这样,当一个网站完全建立的以后,程序就会很多,特别是网页设计的特殊性,服务器与用户的交互程序特别多,所以,如果程序员不是很有经验或者没有强烈的安全意识,程序的漏洞就会很多,给网站带来不可估量的安全隐患。这些程序漏洞,一定程度上,可能比网站服务器的漏洞更加严重,因为这些漏洞防火墙或者入侵检测系统根本无法防止。
一、编程漏洞的形成
编程漏洞怎么形成的呢?我们需要对网页编程有比较全面的认识才可以理解。首先,我们来看看网页编程的特点。
1、网页编程交互性强
之所以采用各种语言来设计网站而不直接采用HTML,目的就是为了更好的管理网站资源,增加网站与浏览者之间的交互。所以,在网站设计的时候,一些常见的交互编程是少不了的,比如留言版、BBS论坛,聊天室等,这些程序最大的共同点就是用户输入很多资料,通过这些资料与其他浏览者交流或者与网站管理者交流。而交互的特点,正式漏洞形成的一大原因,因为用户输入信息是不可预测的,如果程序没有考虑到或者考虑不全面一些安全问题,用户输入就有可能成为攻击事件,不管有意还是无意。
2、网页编程字符处理特别多
上面我们谈到,交互其实就是信息的流通。所以,这些信息的处理就是大问题,怎样严格控制用户输入信息的内容、信息格式、信息长度都是编程需要考虑的问题。
3、网页编程涉及安全最里层
我们知道,网页编程直接和服务器打交道,这些程序都是直接和网站目录、网站数据库设置网站设置、系统设置相关,通过这些程序,可以访问网站目录、设置等几乎所有服务器内容。仔细想,这些程序其实都是很有潜在安全问题的,因为它们太敏感了。所以,如果程序设计有漏洞,几乎就等于网站有漏洞,甚至完全开放。
4、网页编程整体人员基础较差
网页编程人员的技术素质,这个问题其实我们可能比较少关注。在部分传统程序员眼中,网页程序设计其实不能称为程序员,他们认为网页程序设计,只需要美工好就可以了,完全没有技巧可言,不叫真正的编程。之所以形成这种观点,有几个原因。一是网页编程相对比较简单,变化较少,基本上,网页编程可以很简单的概括出几个类型:留言版、论坛、聊天室、邮件列表、新闻发布、软件下载等,而这些类型的编程,大部分都有模式可循,和传统编程相比,的确比较简单,任意掌握;二是网页编程人员大部分半路出家,专业的程序员相对较少,编程的系统训练较少,可能编程的基础也比较弱,所以,编程方面可以还是有一些缺陷的;三是部分网站直接下载网上免费程序来建立网站,这些程序的健壮性、安全性都没有严格考虑,如果网站采用者不自己修改这些程序而直接照搬得话,很可能存在严重安全问题。
二、编程漏洞的类型
网页编程相对比较简单,漏洞的形成实例虽然很多,但是,都有一些内在地共同点可以寻找,以此归纳出一些共同的特点,供我们参考。
1、用户输入验证不全面
在网站编程而言,有一个规则可能我们需要牢记,那就是对于用户和用户的输入,都必须抱怀疑态度,不能完全信任。所以,对于用户的输入,不能简单的直接采用,而必须经过严格验证,确定用户的输入是否符合输入规则才可以现实、录入数据库。总结用户输入验证,应该包括以下几个方面。
(1)输入信息长度验证
这一点可能我们比较少注意,因为我们往往认为一般用户不会故意将输入过分拉长,稍微有一些用户可能捣乱,但是,在这一点上可能没有危害。其实,只要我们仔细考虑,如果不进行输入验证,可能的危害会相当大,为什么?如果用户输入的信息达到几个兆,而我们的程序又没有验证长度的话,想想的危害就有:a、程序验证出错;b、变量占用大量内存,出现内存溢出,至使服务器服务停止甚至关机。这样的危害多大?
(2)输入信息敏感字符检查
这一点平时在设计程序的时候我们可能都有注意,主要关注的是一些JavaScript的敏感字符,比如在设计留言版的时候,我们会将“<”等符号的信息去除,以免用户留下页面炸弹。但是,是否这些就已经足够了呢?还远远不够。我们还有很多没有注意到,以下几个方面我们需要特别注意。
a、留言版内容信息的过滤
这一点上面已经提到,平时也使用较多。
b、用户名信息的过滤
这一点其实我们常常验证,但是,用户名的验证我们往往只是验证长度,没有验证JavaScript或者HTML的标记,这样就容易形成漏洞。比如用户在用户名填入“<h1>黑</h1>”,一般的用户名验证都可以通过,但是,显示在网页中却是很不美观的。这个输入没有破坏,但是,如果用户名验证不严,没有长度限制,后果怎样呢?

补充:网页制作,设计基础 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,