7.1 ASP.NET网站安全介绍
网站安全是一个直接影响软件成败的因素。一个好的软件对于网站的安全方面十分重要。如果一个软件做出来就被人黑了,那么做出来的软件就没有必要了。所以对于软件的安全来说与做软件来说是等同重要。对于软件的安全主要是有操作系统的安全、IIS的安全、数据的安全、编程时需要注意的安全问题。
7.1.1 操作系统的安全
操作系统的安全方面主要可以从以下一个方面来加强操作系统的安全性。第一,在第一时间安装微软的补丁程序。第二,安装防火墙。第三,安装防病毒软件。第四,不要在服务器上执行管理功能之外的操作。这几个方面是操作系统安全主要的几个方面。
7.1.2 IIS的安全
IIS的配置直接影响到网站的安全,我们发布网站的时候会依靠IIS来发布。下面列出常见的安全设置。有效降低网站安全风险。
(1)将磁盘上的默认web站点位置从C:/inetpub/更改到其他卷,以防止攻击者通过输入“../”作为位置说明轻松访问C:驱动器;
(2)让IIS以最小的NTFS权限运行。严格限制权限。
(3)卸载最不安全的组件,防止与此组件相类似的木马。
(4)禁用TCP/IP上的NetBIOS。NetBIOS是许多安全缺陷的根源。
(5)设置IIS的web内容目录访问权限;
(6)保护日志安全。日志是系统安全的重要方面之一。IIS的日志能记录所有用户的请求,确保日志的安全能有效提高系统的整体安全性。
(7)将asp.net账户添加到IIS锁定工具创建的本地“web应用程序组”,以防进程在被偷袭时运行任何未得到授权的命令行可执行程序。
(8)使用IIS锁定工具(IIS Lockdown Tools)删除应用程序中未使用的所有其他动态内容类型。以减少攻击者可用来攻击的区域;
(9)配置URLScan2.5,使其只允许应用程序中使用的扩展集,并阻止较长的请求;
7.1.3 数据库的安全
对于数据库的安全性应尽可能满足一下的原则:
(1)将SQL Server安装在NTFS分区上;
(2)安装当时阀不的最新服务包和修补程序;
(3)限制所支持的身份验证协议的数量。
(4)给SA账户设置足够复杂的密码;
(5)选择低权限本地账户启动SQL Server服务;
(6)使用Services MMC管理单元停止Distributed Transaction Coordinator(MSDTC)服务,并将其设置为手动启动,以防数据库运行事务,并且服务器本身也不会运行COM+应用程序;
(7)禁用应用程序不需要的SQL Server代理 和Microsoft搜索服务;
(8)设置Server Network的网络属性,由“直接客户端广播”改为“隐藏SQL Server”;
(9)如应用程序不使用“命名管道”协议,则删除之;
(10)限制数据库用户只具有得到的数据库操作权限。
7.1.4 编程时需要注意都安全问题
Web网站是对整个Internet开放的,所有人都可以通过Internet访问,所以编程时对于每个页面都应注重它的安全问题。主要有以下几个方面需要注意:第一,窗体身份验证;第二,输入有效性验证;第三使用参数化存储过程;第四,输出的数据进行HTML编码;第五,信息加密存储。
7.2 ASP.NET安全编程
7.2.1 什么是跨站点脚本攻击
跨站脚本攻击(cross-sitescripting,简称XSS),也叫CSS。它指的是恶意攻击者向web页面中插入恶意html代码。当用户浏览该页时。嵌入其中web里面的html代码会被执行。其攻击损害不仅是web站点,而且还对客户端有危害。为了搜集用户信息,攻击者通常会在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺骗用户(详见下文)。一旦得手,他们可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告等。每天都有大量的XSS攻击的恶意代码出现。当前的跨站点脚本攻击已经发展到了一个非常妖魔化的地步,不再只局限于窃取他人的Cookie。更加恶毒的跨站点脚本攻击会让访问者中恶意插件,中木马。一般的跨站点脚本攻击会利用漏洞执行document.write。写入一段javascript,让浏览器执行。现在部分站点屏蔽了 document.write或者把用户可能注入的脚本放在一个display=none的Div中,让注入攻击失败。当前又发现了用innerHTML 的方式注入可见Div,实现跨站点脚本攻击的方式。
7.2.2 在ASP.NET编程中防范XSS攻击
防止XSS攻击,必须对用户所输入的内容进行检查。有很多符号是编写脚本语言所必须的。所以编写代码的时候我们可以用很多种方法过滤掉这些特殊字符。下面介绍几种处理特殊字符的方法。
1.用验证控件进行验证。
2.通过编写服务器端数据验证组件对数据进行验证。
3.利用ValidateRequest对用户数据进行检查
7.2.3 防止SQL注入攻击
SQL注入攻击是很常见的一种攻击类型,它利用数据库命令中一些缺点使数据命令含有恶意的代码。这些代码能“欺骗”系统,通过用户登录的,也就是用一些假的参数进入系统。
对于SQL注入防范的常用方法是:一、确保用户输入是搭档的类型,并遵循预期的模式。二、使用参数化的查询(sqlparameter参数化),使用存储过程是最好的了。三、使用SQL Server权限来限制各个用户可以对数据库执行的操作。
7.2.4 Cookie和身份验证
Cookie主要是用户帮助开发人员达到一定的目的。它充当了浏览器与服务器之间的一种持续性链接。而Cookie也是常被人盗取使用户失窃个人信息的一个途径。在使用表单身份验证的时候就会隐式使用Cookie。自然也可以不使用Cookie表单身份验证。但这样会使ID嵌入URL中,这样更不安全了。Cookie有生命周期的。最长可以设置为50年。但一般我们设置Cookie设置得比较短。因为这样能使Cookie尽量避免被窃取或被人添加恶意数据。
7.2.5 数据库加密
加密可以使数据不被别人查看和修改。即使在不安全的信道上通信也不会被别人查看或修改。这样能使数据更加安全。不仅可以增加数据的保密性,而且可以保证数据的完整性。和对数据来源能清楚掌握。
一般加密有对称加密、非对称加密、数字签名、哈希。
对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
非对称加密:采用双钥密码系统的加密方法,在一个过程中使用两个密钥,一个用于加密,另一个用于解密,这种加密方法称为非对称加密,也称为公钥加密,因为其中一个密钥是公开的(另一个则需要保密)。
数字签名:通过创建对特定方唯一的数字签名来帮助验证数据是否发自特定方。此过程还使用哈希函数。
哈希:将数据从任意长度映射为定长字节序列。哈希在统计上时唯一的;不同的双字节序列哈希后的结果将不同。对于用电脑的各位来说操作系统应该不会陌生吧?而操作系统并不是一个没有缺陷的软件,对于软件也没有没一个bug的软件。对于做软件的人来说只有尽量减少软件的bug,并不能完全消除软件的bug。在用电脑的时候我们经常会遇到电脑发出由微软提示安装系统的补丁的信息。对于软件的补丁,是我们的操作系统