asp.net 开发人员应当始终坚持的做法
如果您正在阅读本文,可能就不需要再向您灌输 web 应用程序中的安全性愈来愈重要这一事实了。您需要的可能是一些有关如何在 asp.net 应用程序中实现安全性的实际建议。坏消息是,没有任何开发平台 — 包括 asp.net在内 — 能够保证一旦采用了该平台,您就能够编写百分百安全的代码。谁要是这么说,一准在撒谎。好消息是,就 asp.net 来说,asp.net,特别是版本 1.1 和即将发行的版本 2.0,集成了一些便于使用的内置防御屏障。
光是应用所有这些功能并不足以保护 web 应用程序,使其免受任何可能和可预见的攻击。但是,如果与其他防御技巧和安全策略相结合,内置的 asp.net 功能将可以构成一个强大的工具包,有助于确保应用程序在安全的环境中运行。
web 安全性是各种因素的总和,是一种范围远超单个应用程序的策略的结果,这种策略涉及数据库管理、网路配置,以及社会工程和 phishing。
本文的目的在于说明 asp.net 开发人员为了将安全标准保持到合理的高度,所应始终坚持的做法。这也就是安全性最主要的内容:保持警惕,永不完全放松,让坏人越来越难以发起黑客攻击。
下面我们来看看 asp.net 提供了哪些可以简化这项工作的功能。
返回页首
威胁的来源
在表 1 中,我汇总了最常见的 web 攻击类型,以及应用程序中可能导致这些攻击得手的缺陷。
攻击 攻击的可能发起人
跨站点脚本 (xss)
回显到页的不可信用户输入
sql 注入
串连用户输入以形成 sql 命令
会话劫持
会话 id 猜测和失窃的会话 id cookie
一次单击
通过脚本发送的未被察觉的 http 张贴
隐藏域篡改
未检查(且受信)的隐藏域被填充以敏感数据
表 1. 常见的 web 攻击
列表中显现出来的关键性事实有哪些?在我看来,起码有以下三点:
• 无论您何时将何种用户输入插入浏览器的标记中,您都潜在地将自己暴露在了代码注入攻击(任何 sql 注入和 xss 变种)之下。
• 必须以安全的方式实现数据库访问,就是说,应当为数据库使用尽可能少的权限,并通过角色来划分各个用户的职责。
• 永远都不通过网络发送敏感数据(更别说是明文了),并且必须以安全的方式将敏感数据存储在服务器上。
有意思的是,上面的三点分别针对的是 web 安全性的三个不同方面,而这三个方面结合起来,才是唯一的一种生成防攻击、防篡改应用程序的合理方式。web 安全性的各个层面可以总结如下:
• 编码实践:数据验证、类型和缓冲区长度检查,防篡改措施
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器