增强Web的安全性

2008-02-23 09:44:32来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

通过互联网,人们可以做网上交易等各种事情。如何使信息不被窃取、站点不被破坏,就成了网络应用开发者、网管员的重要责任。本文介绍了几种提高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) 信息加密存储

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

数据库连接字符串存放有包括数据库服务器的位置、数据库名称和用户名&密码等数据库连接信息,攻击者一旦设法读取字符串就可用它来访问数据库并对数据库进行恶意破坏。通常我们可以采用以下方法保护加密连接字符串等秘密信息:加密连接字符串,将其存储在注册表中,并使用访问控制列表(ACL)确保只有系统管理员和ASP.NET辅助进程才能访问注册表项。通过使用.Net Framework 的 System.Security.Cryptography 类中的 TripleDES 类提供的功能可实现对信息的加密。

2.Internet信息服务(IIS)层安全

对IIS进行安全配置一般包括如下几方面内容,可最大程度地保障系统安全:

(1) 尽可能安装软件的最新版本;

(2) 尽可能安装软件的最新服务包和修补程序;

(3) 将磁盘上的默认Web站点位置从c:\inetpub\更改到其他卷,以防止攻击者通过输入“..\”作为位置说明轻松访问C:驱动器;

(4) 使用IIS锁定工具(IIS Lockdown Tool)删除应用程序中未使用的所有其他动态内容类型,以减少攻击者可用来攻击的区域;

(5) 确保应用程序使用低权限的默认本地服务账户(ASP.NET账户)运行ASP.NET代码;

(6) 将ASP.NET账户添加到IIS锁定工具创建的本地“Web应用程序组”,以防进程在被偷袭时运行任何未得到授权的命令行可执行程序;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:提防他人动用电脑另有妙招

下一篇:Web服务器记录中查找黑客踪迹