创建安全Web应用程序的主题非常广泛。它需要研究以了解安全漏洞。您还需要熟悉Windows、.NET框架和ASP.NET的安全设施。最后,有必要了解如何使用这些安全特性来对付威胁。

即使您没有安全方面的经验,也应采取基本措施来保护Web应用程序。以下列表提供了适用于所有Web应用程序且应遵循的最低安全性准则:

一般Web应用程序安全建议

以最少的特权运行应用程序

了解您的用户

防止恶意用户输入

安全访问数据库

创建安全错误消息

安全地保密

安全使用Cookies

防范拒绝服务威胁

有关帮助您设计,开发,配置和部署更安全的ASP.NET Web应用程序的全面详细的安全指南,请参阅Microsoft模式和实践Web站点上提供的安全模块。

一般Web应用程序安全建议

如果恶意用户可以使用简单的方法访问您的计算机,即使最复杂的应用程序安全性也会失败。请遵循以下准则:

经常备份,并保持备份物理安全。

保持Web服务器计算机的物理安全,以便未经授权的用户无法访问,关闭或接受它。

使用Windows NTFS文件系统,而不是FAT32。 NTFS提供比FAT32更多的安全性。有关详细信息,请参阅Windows文档。

使用强密码保护Web服务器计算机和同一网络上的所有计算机。

安全的IIS。有关详细信息,请参阅Microsoft TechNet安全中心网站。

关闭未使用的端口并关闭未使用的服务。

运行监控入站和出站流量的病毒检查程序。

建立并实施一项政策,禁止用户将密码记录在易于查找的位置。

使用防火墙。有关建议,请参阅Microsoft安全站点上的Microsoft防火墙指南。

从Microsoft和其他供应商安装最新的安全修补程序。例如,请参阅Microsoft TechNet安全中心网站,其中列出了所有Microsoft产品的最新安全公告。其他供应商有类似的网站。

使用Windows事件日志记录并经常检查日志中是否存在可疑活动。这包括重复尝试登录系统以及针对Web服务器的大量请求。

运行具有最小权限的应用程序

当应用程序运行时,它在本地计算机上和远程计算机上具有特定特权的上下文中运行。有关配置应用程序标识的信息,请参阅配置ASP.NET进程标识。若要以最少的特权运行,请遵循以下准则:

Configuring ASP.NET Process Identity.

不要使用系统用户(管理员)的身份运行应用程序。

在具有最低实际权限的用户的上下文中运行该应用程序。

设置应用程序所需的所有资源的权限(访问控制列表或ACL)。使用最不允许的设置。例如,如果在应用程序中实用,则将文件设置为只读。有关ASP.NET应用程序标识所需的最低ACL权限的列表,请参阅ASP.NET必需访问控制列表(ACL)

将Web应用程序的文件保存在应用程序根目录下的文件夹中。不允许用户选择为应用程序中的任何文件访问指定路径。这有助于防止用户访问服务器的根目录。

了解您的用户

在许多应用程序中,用户匿名访问站点(无需提供凭据)。如果是,则应用程序通过在预定义用户的上下文中运行来访问资源。默认情况下,此上下文是Web服务器计算机上的本地ASPNET用户(在Windows 2000或Windows XP上)或NETWORK SERVICE用户(在Windows Server 2003上)。要限制对经过身份验证的用户的访问,请遵循以下准则:

如果您的应用程序是Intranet应用程序,请将其配置为使用Windows集成安全性。这样,用户的登录凭据可用于访问资源。有关更多信息,请参阅ASP.NET模拟。

切勿回显(显示)未经过滤的用户输入。在显示不受信任的信息之前,编码HTML以将可能有害的脚本转换为显示字符串。

永远不要在数据库中存储未过滤的用户输入。

如果您想接受来自用户的一些HTML,请手动筛选它。在过滤器中,显式地定义您将接受的内容。不要创建试图过滤掉恶意输入的过滤器;很难预测所有可能的恶意输入。

不要假设从HTTP请求头(在HttpRequest对象中)获得的信息是安全的。对查询字符串、cookie等使用安全措施。请注意,浏览器向服务器报告的信息(用户代理信息)可能被欺骗,以防在应用程序中发生重要情况。

如果可能,请勿将敏感信息存储在可从浏览器访问的位置,例如隐藏字段或Cookie。例如,不要在cookie中存储密码。

注意:视图状态以编码格式存储在隐藏字段中。默认情况下,它包含消息身份验证代码(MAC),以便页面可以确定视图状态是否被篡改。如果敏感信息存储在视图状态,则通过将页面的ViewStateEncryptionMode属性设置为true进行加密。

安全地访问数据库

数据库通常具有自己的安全性。安全Web应用程序的一个重要方面是为应用程序设计一种安全访问数据库的方法。请遵循以下准则:

使用数据库的固有安全性来限制谁可以访问数据库资源。确切的策略取决于您的数据库和您的应用程序:

如果在您的应用程序中可行,请使用集成安全性,以便只有经过Windows身份验证的用户才能访问数据库。集成安全性比将显式凭据传递到数据库更安全。

如果您的应用程序涉及匿名访问,请创建权限非常有限的单个用户,并通过以此用户身份进行连接来执行查询。

不要通过连接涉及用户输入的字符串来创建SQL语句。而是创建参数化查询并使用用户输入来设置参数值。

如果必须在某个地方存储用户名和密码作为数据库登录凭据,则将它们存储在Web.config文件中,并用受保护的配置保护该文件。有关详细信息,请参阅使用受保护的配置加密配置信息。

有关安全访问数据的更多信息,请参阅保护数据访问和保护ADO.NET应用程序。

创建安全错误消息

如果您不小心,恶意用户可以从显示的错误消息中推断出有关您的应用程序的重要信息。请遵循以下准则:

不要编写错误消息来回显可能对恶意用户有用的信息,例如用户名。

配置应用程序不向用户显示详细错误。如果要显示用于调试的详细错误消息,请首先确定该用户是否是Web服务器的本地用户。有关详细信息,请参见如何:显示安全错误消息。

使用customErrorsconfiguration元素可以控制谁可以从服务器查看异常。

为容易出错的情况(如数据库访问)创建自定义错误处理。有关更多信息,请参阅ASP.NET页面和应用程序中的错误处理。

安全地保存敏感信息

敏感信息是你需要保密的任何信息。典型的敏感信息是密码或加密密钥。如果恶意用户可以获取敏感信息,那么受秘密保护的数据就会被泄露。遵循以下准则:

如果应用程序在浏览器和服务器之间传输敏感信息,请考虑使用安全套接字层(SSL)。有关如何使用SSL保护站点的详细信息,请参阅http://..microsoft.com的Microsoft知识库中的文章Q307267“HOW TO:使用Windows 2000中的安全套接字层保护XML Web服务”。

使用受保护的配置来保护配置文件(如Web.config或Machine.config文件)中的敏感信息。有关更多信息,请参阅使用受保护的配置加密配置信息。

如果您必须存储敏感信息,请不要将其保留在网页中,即使是您认为人们无法看到它的表单(例如服务器代码中)。

使用System.Security.Cryptography命名空间中提供的强加密算法。

安全使用Cookies

Cookie是保持用户特定信息可用的有用方法。但是,由于cookie被发送到浏览器的计算机,因此很容易受到欺骗或其他恶意攻击。请遵循以下准则:

不要在cookie中存储任何关键信息。例如,不要在cookie中存储用户的密码,即使是临时的。通常,不要在cookie中保存任何可能损害应用程序的东西(如果被欺骗)。相反,在cookie中保留对服务器上信息所在位置的引用。

将Cookie的有效期设置为最短的实际时间。尽可能避免永久性Cookies。

考虑加密cookie中的信息。

考虑将cookie上的Secure和HttpOnly属性设置为true。

防范拒绝服务威胁

恶意用户可能会破坏应用程序的间接方式是使其不可用。恶意用户可能会使应用程序太忙而无法为其他用户提供服务,或者只是导致应用程序崩溃。请遵循以下准则:

使用错误处理(例如,try-catch)。包含finally块,在发生故障时释放资源。

配置IIS以使用进程限制,这可以防止应用程序耗尽不成比例的CPU时间。

在使用或存储之前测试用户输入的大小限制。

在数据库查询上放置大小保护措施。例如,在ASP.NET网页中显示查询结果之前,请确保没有不合理数量的记录。

对文件上传设置大小限制,如果这些是您的应用程序的一部分。您可以使用以下语法在Web.config文件中设置限制,其中maxRequestLength值以千字节为单位:

您还可以使用RequestLengthDiskThreshold属性来减少大型上载和表单帖子的内存开销。

文章:https://docs.microsoft.com/en-us/previous-versions/aspnet/zdh19h94%28v%3dvs.100%29

Web应用程序的基本安全实践的更多相关文章

  1. 提升 web 应用程序的性能(二)

    最佳实践 本章将略述能帮助您提升 web 应用程序性能的最佳实践. 减少 HTTP 请求数 每个 HTTP 请求都有开销,包括查找 DNS.创建连接及等待响应,因此削减不必要的请求数可减少不必要的开销 ...

  2. 渐进式Web应用程序的深入概述

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://www.grapecity.com.cn/blogs/wijmo-depth-ove ...

  3. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  4. Python 项目实践三(Web应用程序)第一篇

    一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...

  5. Python 项目实践三(Web应用程序)第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

  6. Python 项目实践三(Web应用程序)第四篇

    接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...

  7. Python 项目实践三(Web应用程序) 第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

  8. 入门实践丨如何在K3s上部署Web应用程序

    在本文中,我们将使用Flask和JavaScript编写的.带有MongoDB数据库的TODO应用程序,并学习如何将其部署到Kubernetes上.这篇文章是针对初学者的,如果你之前没有深度接触过Ku ...

  9. 构建 iOS 风格移动 Web 应用程序的8款开发框架

    使用 HTML5,CSS3 和 JavaScript 开发移动应用经过实践证明是一种可行的方式.这里收录了几款 iOS 风格的手机应用程序开发框架,帮助您使用擅长的 Web 技术来开发移动应用程序.这 ...

随机推荐

  1. Linux简介及最常用命令(简单易学,但能解决95%以上的问题)

    转载 longctw 版权声明:只为分享.欢迎转载^V^ https://blog.csdn.net/xulong_08/article/details/81463054 Linux是目前应用最广泛的 ...

  2. nor flash启动与nand flash启动的区别

    1)接口区别:NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来.NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据.通俗的说,就是光给地址不行,要先命令,再给地 ...

  3. 传统神经网络ANN训练算法总结

    传统神经网络ANN训练算法总结 学习/训练算法分类 神经网络类型的不同,对应了不同类型的训练/学习算法.因而根据神经网络的分类,总结起来,传统神经网络的学习算法也可以主要分为以下三类: 1)前馈型神经 ...

  4. Linux新手常见问题

    yum与apt的区别 参考:https://blog.csdn.net/qq_26182553/article/details/79869666 ubuntu下su: Authentication f ...

  5. java多线程系列(二)---对象变量并发访问

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  6. Appium安卓与环境配置

    下载与安装: Appium-desktop项目地址:https://github.com/appium/appium-desktop 下载地址:https://github.com/appium/ap ...

  7. 引用“kernel32”读写ini配置文件

    引用"kernel32"读写ini配置文件 unity ini kernel32 配置文件  引用"kernel32"读写ini配置文件 OverView ke ...

  8. mysql 优化之 doublewrite buffer 机制

    是什么? doublewrite buffer是mysql 系统表空间的一块存储区域. 有什么用? 在Innodb将数据页写到数据存储文件之前,存储从Innodb缓存池刷过来的数据页.且只有将数写入d ...

  9. 解析xml报文,xml与map互转

    这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...

  10. Netty源码分析第6章(解码器)---->第2节: 固定长度解码器

    Netty源码分析第六章: 解码器 第二节: 固定长度解码器 上一小节我们了解到, 解码器需要继承ByteToMessageDecoder, 并重写decode方法, 将解析出来的对象放入集合中集合, ...