勾引客'BLog
为网站建设|网页设计|SEO搜索引擎优化|网络推广事业而努力奋斗

网站设计中的安全性研究

1 引言

信息与通信技术迅速在多个领域取得了突破性进展,如实现了光纤密集波分复用的超大容量光通信系统,还有即将投入使用的具有多种业务、多种功能的第三代移动通信系统,再就是牵动全世界的、即将使100多年来的电话网发生变革的、在一个网上实现话音、数据和广播电视三网融合的新一代互联网。信息与通信如此神奇的发展,使当今社会生产力从工业化社会大大向信息化社会推进了一步,知识(科技、网络)经济已不可逆转地出现于市场商品经济的大潮中。可是,信息化社会赖以建立的物质基础——信息与通信网,却在万千世界中处于新生的、比较脆弱的位次,它的成长、它的安全性与可靠性,承受着来自两大方面的损害、攻击与破坏。一是来自信息与通信网设备系统本身的软件与硬件。由于当前工艺(技术)水平所限,它们不可避免地会存在弱点、缺陷、变质、老化、过期以及互串、互拆、过压、过流、击穿和烧毁等现象。为了设备系统的可靠性,为此建有庞大的支撑系统和完善的监视、监测、转换等功能的维护管理系统,还有冷、热备用以及替代体制等,以实现对信息与通信网自动或人为地更换、更新元部件和线缆;更换、更新软件版本;补充和扩展网络。其目的是使信息与通信网设备系统有满意的可靠性。

网站设计中,网站自身的安全性非常重要,对个人信息的真实性和机密性的研究,具体的研究内容包含了以下的几个方面:

1) 软件安全

软件安全主要是指保证所有计算机程序和文件资料免遭破坏、非法拷贝、非法使用而采用的技术和方法。它的主要内容有:

① 软件的自身安全:防止软件丢失、被破坏、被篡改、被伪造,核心是保护软件自身的安全;

② 软件的存储安全:可靠存储(保密/压缩/备份);

③ 软件的通信安全:系统拥有的和产生的数据信息完整、有效,不被破坏或泄露;

④ 软件的使用安全:合法使用,防窃取和非法复制;

⑤ 软件的运行安全:确保软件的正常运行,功能正常。

2) 数据安全

个人信息的数据安全是指通过对数据采集、录入、存储、加工、揭穿地等数据流动的各个环节进行精心的组织和严格控制,防止数据被故意的或偶然的非法授权泄露、更改、破坏或使数据被非法系统辩识、控制。它包括以下内容:

① 数据库的安全;

② 数据加密技术;

③ 压缩技术;

④ 备份技术。

3) 网络安全

随着信息高速公路的建设和国际互联网的形成,个人信息通过网络传播也是很频繁的途径,网络安全是指为了保证网络及其安全而采用的技术和方法。主要包括:

① 网络安全策略和安全机制;

② 网络数据加密技术;

③ 密钥管理技术;

④ 防火墙技术。

2 操作页面控制算法的实现

某些非法用户跳过登录页面直接进入管理页面继而对信息进行非法操作。而使用的自定义的“cookies.asp”来阻止非法用户直接跳过而必须经过登录页面登录正确以后才能进行下一步的操作。其代码如下:

<%

if request.cookies("ershou")("administrator")="" or request.cookies("ershou")("ijob")<>"1" or session("admin_ijob")="" or request.cookies("ershou")("domain")="" then

response.redirect "login.asp"

end if

if Request.ServerVariables("SERVER_NAME")<>request.cookies("ershou")("domain") then

response.redirect "login.asp"

end if

%>

当用户未通过登录而直接进入其他的页面时,系统将自动还原到登录界面login.asp。

3 网站防注入及IP检测算法的实现

许多网站在程序编写时,没有对输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果进行分析,从而获取自己想要知道的信息,这就是所谓的SQL Injection。非法攻击者使用SQL注入的思路一般是:

1) SQL注入漏洞的判断,即寻找注入点;

2) 判定后台数据库类型;

3) 确定XP_CMDSHELL的可执行情况。如当前的用户具有数据库设置的SA权限且master.dbo.xp_shell扩展存储过程能够正确执行,则计算机就可以被完全控制也就完成了整个注入过程。

SQL防注入系统利用注入漏洞定义一个新的函数如下:

Function SafeRequest(ParaName,ParaType)

'--- 传入参数 ---

'ParaName:参数名称-字符型

'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)

Dim ParaValue

ParaValue=Request(ParaName)

If ParaType=1 then

If ParaValue="" or not isNumeric(ParaValue) then

Response.write "参数" & ParaName & "必须为数字型!"

Response.end

End if

Else

ParaValue=replace(ParaValue,"'","''")

End if

SafeRequest=ParaValue

End function

所以SQL防注入系统在目前很多系统中都有被使用。在IP检测的同时系统会自动产生数据库记录操作IP的详细情况,并加入了封锁/解封控制。录入数据库如表1所示。

4 网站数据库加密

一个网站数据库的保密性是很值得考虑的问题,在这里提供三种数据库保密方法:

1) 修改数据库的后缀名

修改数据库的后缀名为.asp放在网站的根目录下,当然cnn.asp中的数据库连接代码也得相应的修改:

<%

set rs=server.createobject("adodb.recordset")

set conn=server.createobject("adodb.connection")

DBPath = Server.MapPath("news.asp")

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

%>

这样别人很难找到你的数据库文件,即便找到了除非他知道改后缀名,否则打开也是一堆asp代码,而不是数据库信息。

2) 利用Access自带的掩码来保密,不过这种方法的保密性较差,稍微懂些Access的人便能破解。

3) 利用加密函数,这种方法的保密性最强,它是利用一段asp代码建立一个加密函数,将需要加密的地方加密后再传给数据库,下面以具体实例来介绍:

利用MD5来实现对数据加密。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

例如,当用户登录的时候,系统把用户输入的密码计算成md5值,然后再去和保存在文件系统中的md5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。

主循环有四轮,每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。

以一下是每次操作中用到的四个非线性函数(每轮一个)。

F(X,Y,Z) =(X&Y)|((~X)&Z)

G(X,Y,Z) =(X&Z)|(Y&(~Z))

H(X,Y,Z) =X^Y^Z

I(X,Y,Z)=Y^(X|(~Z)) (&是与,|是或,~是非,^是异或)这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。

5 数据备份与恢复技术

任何一个安全系统都应该包括数据库的备份及恢复。

5.1 数据备份

用代码来实现数据库的备份,操作界面如图1所示。

数据库备份具体也由代码来实现:

<%

Sub backupdata()

Dbpath=request.form("Dbpath")

Dbpath=server.mappath("Dbpath")

bkfolder=request.form("bkfolder")

bkdbname=request.form("bkdbname")

Set Fso=server.createobject("scripting.filesystemobject")

if fso.fileexists("dbpath") then

If CheckDir(bkfolder) = True Then

fso.copyfile dbpath,bkfolder& "\"& bkdbname

else

MakeNewsDir bkfolder

fso.copyfile dbpath,bkfolder& "\"& bkdbname

end if

errmsg="<li>备份数据库失败"

call disok()

Else

errmsg="成功备份数据!"

call diserror()

End if

end sub

在备份数据库时应注意检查当前需要备份的数据库文件名是否存在以及根据定名来备份当前数据库自动生成目录。

5.2 数据恢复

数据恢复的代码如下:

<BODY>

<%

if request("action")="Restore" then

backpath=request.form("backpath")

Dbpath=request.form("Dbpath")

if dbpath="" then

errmsg="<li>请输入您要恢复成的数据库全名。"

call diserror()

else

Dbpath=server.mappath("Dbpath")

end if

backpath=server.mappath(backpath)

'Response.write Backpath

Set Fso=server.createobject("scripting.filesystemobject")

if fso.fileexists(dbpath) then

fso.copyfile Backpath,Dbpath

errmsg="<li>成功恢复数据!"

call disok()

else

errmsg="<li>备份目录下并无您的备份文件!"

call diserror()

end if

数据库恢复界面如图2所示。

6 控制登录错误机制

对于一些低级非法用户在登录页面(login.asp)进行操作时,系统会对其重复错误登录而处于保护状态,有效的控制了网站的有效使用率。具体实现方法是在其登录的时候对其进行错误登录计数,重复登录三次系统将会自动处于保护状态而禁止非法用户继续操作。具体的实现措施是在登录控制代码段定义一个静态变量:

if session("ijob_err")="" then

session("ijob_err")=0

else

if session("ijob_err")>=3 then '错误次数设置

response.write " <b>系统保护状态,错误次数太多!"

response.end

在用户登录时对用户登录错误次数计数,每错误一次给开始定义的数据+1。

session("ijob_err")=session("ijob_err")+1

response.end

7 小结

网站的安全问题是一个立体的,全方位的系统工程。本文从系统与应用程序设计两个不同的层网站的安全问题进行了讨论,提出了一些提高安全性的具体措施。对一些安全性要求较高的网站,我们可以采用 SSL 协议进行保密传输。SSL 协议采用采用 128 位RSA算法,具有很高的安全性,它允许客户机与服务器进行相互认证,并在发送与接收应用协议第一个字节之前处理算法与加密密钥。而且,SSL 与应用协议独立,为服务器提供了一种安全的虚拟透明的加密通信连接。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

网站分类

我的音乐

最近发表

Copyright 2008 GoingKer.com Some Rights Reserved.

湘ICP备08103215号 Z-Blog