新闻动态
asp.net网站安全
https://www.sytm.net 发布日期:2010/6/13 12:50:39

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   类提供的功能可实现对信息的加密。  

6)用replace,去掉写特殊字符,但目前我只知道去掉( ')  
7)所有数据链接用存储过程  
8)sqlserver数据库用复杂的名字,不用sa,和空密码,注意密码表设置复杂的名字
9)用校验码

更多阅读
返回列表
© 2010 TianMei Technology All rights reserved. ICP:辽B2-20150138辽公网安备 21010202000010号  目录概览