当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > 增强Web的安全性

安全防护
2003服务器防止海洋木马的安全设置(1)
2003服务器防止海洋木马的安全设置(2)
2003服务器防止海洋木马的安全设置(3)
加固脆弱的IIS服务
linux操作系统的优化及安全配置(1)
linux操作系统的优化及安全配置(2)
linux操作系统的优化及安全配置(3)
Server2003 DNS服务安装篇(2)
Server2003 DNS服务安装篇(3)
Server2003 DNS服务安装篇(4)
WindowsServer2003安全事件ID分析(1)
WindowsServer2003安全事件ID分析(2)
打造安全的Windows 2003系统(5)
Win2003 Server手动设置全攻略(1)
Win2003 Server手动设置全攻略(2)
Win2003 Server手动设置全攻略(3)
Win2003 Server手动设置全攻略(4)
搜索型注入之我看
为Windows 2003安全—层层设防(1)
为Windows 2003安全—层层设防(2)

安全防护 中的 增强Web的安全性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 41 ::
收藏到网摘: n/a

 

通过互联网,人们可以做网上交易等各种事情。如何使信息不被窃取、站点不被破坏,就成了网络应用开发者、网管员的重要责任。本文介绍了几种提高Web站点安全的原则和方法。

一、应用环境

一般来说,提供数据库应用服务的Web站点主要由操作系统服务器、数据库服务器和Web服务器三项构成,由此,我们对Web站点的安全设置就可以从这三方面入手。基于不同的环境配置的Web解决方案,其安全考虑各有侧重,但基本的原则是大致相同的。下面我们以基于Windows2000 Advanced Server、Internet信息服务5.0和SQL Server 2000环境构建Web解决方案为例,讨论Web站点的安全问题。此外,由于目前大多数网站开发都使用Microsoft的.Net Framework,我们将.Net Framework也考虑进去。

二、解决方法

1.Web应用程序层安全

Web应用程序层安全即是在进行Web应用开发时应该考虑的安全因素,这里包括窗体身份验证、输入有效性验证、使用参数化存储过程、输出数据HTML编码、信息加密等内容。

(1) 窗体身份验证

窗体身份验证即是当用户请求一个安全页面时,系统要对其进行判断,如果该用户已经登录系统并尚未超时,系统将返回此页面给请求用户; 反之如该用户尚未登录,系统就要将此用户重定向到登录页面。

以上所述功能的实现只需对Web.config文件进行如下配置即可。

 


如果系统中某些页面不希望被匿名身份用户访问,可以对Web.config进行如下配置:

 


……

 


……

 

对进行身份验证的登录页本身,应该采取两步方式验证用户存在且密码正确,且不可为图简便而使用一条SQL语句进行验证(如果攻击者攻破网站,并将SQL语句的where子句末尾加上一段永远为真的判断语句,则无论何时他都可以通过身份验证)。

存在安全隐患的身份验证语句是:select * from users where name = namestr and password = passwdstr。

比较安全的用户身份验证应该是:判断用户是否存在用“select name,password from users where name = namestr”。

如用户存在,将返回一条包括用户名和密码的记录,然后判断由数据库返回的密码和用户输入的密码值:

if password = passwdstr {

//通过验证后的程序代码

……

}else{

//未通过验证后的程序代码

……

}

为加强用户名、密码等这些敏感信息在公网上的安全传输,应通过安全套接字层加密后再返回给Web服务器。

(2) 输入有效性验证

输入有效性验证即是对所有用户输入的字符范围进行限制,以防可用于向Web站点发送恶意脚本的字符被禁止使用。

通过ASP.NET的System.Text.RegularExpressions.Regex 类提供的功能,用正则表达式对数据进行验证,如下所示:

Regex isNumber = new Regex(“^[0-9]+$”);

if(isNumber.Match(inputData) ) {

// 使用它

……

}

else {

// 丢弃它

……

}

正则表达式是用于匹配文本模式的字符和语法元素集合,用于确保查询字符串是正确且无恶意的。

(3) 使用参数化存储过程

使用参数化存储过程是指在Web应用中,尽可能将对数据库的操作使用存储过程来完成,而不是动态构造SQL语句。

将与数据库的交互限制到存储过程,这通常是增强Web安全的一个最佳方案。如果不存在存储过程,则 SQL 查询必须由 Web 应用程序动态构造。如果 Web 层遭到破坏,攻击者就可以向数据库查询中插入恶意命令,以检索、更改或删除数据库中存储的数据。使用存储过程,Web 应用程序与数据库的交互操作仅限于通过存储过程发送的几个特定的严格类型参数。每当开发人员使用.Net Framework 调用存储过程时,系统都会对发送到此存储过程的参数进行检查,以确保它们是存储过程可接受的类型(如整数、8 个字符的字符串等)。这是 Web 层有效性验证上的又一个保护层,可确保所有输入数据格式正确,且不能自行构造为可操作的 SQL 语句。

(4) 输出数据HTML编码

输出数据HTML编码是指在将任何数据返回给用户前均应采用HTML编码,以防止跨站点的脚本攻击。因为攻击者一旦破坏了数据库,便可向记录中输入脚本,此脚本随后被返回给用户并在浏览器中执行。通过HTML编码,可将大多数脚本命令自动转换为无害文本。

通过System.Web.HttpServerUtility 类中的 HtmlEncode 方法可实现HTML编码,如下所示:

SomeLabel.Text = Server.HtmlEncode(username);

(5) 信息加密存储

信息加密存储是指对如数据库连接字符串、用户秘密等敏感信息进行加密存储,以妥善保护数据。

数据库连接字符串存放有包括数据库服务器的位置、数据库名称和用户名&密码等数据库连接信息,攻击者一旦设法读取字符串就可用它来访问数据库并对数据库进行恶意破坏。通常我们可以采用以下方法保护加密连接字符串等秘密信息:加密连接字符串,将其存