Web安全解决方案
什么是 .NET Framework 安全性?
.NET Framework 提供了用户和代码安全模型,允许对用户和代码可以执行的操作进行限制。要对基于角色的安全性和代码访问安全性进行编程,可以从 System.Security 命名空间中使用类型。.NET Framework 还提供了System.Security.Cryptography 命名空间,公开对称和不对称的加密与解密、散列、随机数生成、数字签名支持等。
要理解 .NET Framework 安全性基本设置,请参阅“.NET 安全基础”单元。
如何编写安全托管代码
用强名称对程序集进行数字签名,使它们不能随意改动。同时,在结合使用强名称的程序集和 ASP.NET 时,需要注意强名称的问题。通过遵守坚固的面向对象设计原理,减小程序集受攻击面,然后使用代码访问安全性,进一步限制哪些代码可以调用您的代码。使用结构化的异常处理方法防止敏感信息蔓延到当前信任边界之外,并开发更加可靠的代码。避免常规问题,特别是输入文件名和 URL 的问题。
有关如何提高托管代码安全性的信息,请参阅“构建安全的程序集”单元。有关如何有效使用代码访问安全性,以进一步提高安全性的详细信息,请参阅“代码访问安全实践”单元。有关执行托管代码复查的信息,请参阅“Security Code Review”单元。
如何安全地处理异常
不要显示内部系统或应用程序的详细信息,如堆栈跟踪、SQL 语句片断等。确保这类信息不被允许蔓延到最终用户或当前信任边界以外。
在异常事件中安全地失败,确保应用程序拒绝访问,而且没有停留在不安全的状态下。不记录敏感或私有数据,如密码,以免造成危害。在记录或报告异常时,如果用户的输入包括在异常消息中,对其进行验证或清理。例如,如果返回一个 HTML 错误消息,您应该对输出进行编码,以避免脚本注入。
有关更多信息,请参阅“构建安全的程序集”和“构建安全的 ASP.NET 页和控件”两单元的“Exception Management”部分。
如何执行托管代码的安全复查
使用分析工具(如 FxCop)分析二进制程序集,确保它们符合 .NETFramework 设计准则。修复分析工具识别出的所有安全缺陷。使用文本搜索工具扫描硬编码机密(如密码)的源代码库。之后,复查具体的应用程序元素,包括 Web 页面和控件、数据访问代码、Web 服务、服务组件等。要特别注意 SQL 注入和跨站点脚本编写缺陷。
还要对使用敏感的代码访问安全技术进行复查,如链接声明和断言。有关更多信息,请参阅“Code Review”单元。
如何保证开发人员工作站的安全性
您可以使用一套方法保证工作站的安全性。保证您的帐户、协议、端口、服务、共享、文件与目录和注册表的安全。最重要的是,保持您的工作站具有当前最新的补丁与更新。如果您在 Microsoft Windows_ XP 或 Windows 2000 上运行 Internet 信息服务 (IIS),则运行 IISLockdown。IISLockdown 应用安全的 IIS 配置,并安装 URLScan Internet 安全应用程序编程接口 (ISAPI) 筛选器,该筛选器用于检测和拒绝潜在的恶意 HTTP 请求。例如,您可能需要修改默认 URLScan 的配置,这样您就可以在开发和测试期间调试 Web 应用程序。
有关更多信息,请参阅本指南的“如何做”部分的“如何保证开发人员工作站的安全”。
如何结合使用代码访问安全性和 ASP.NET
使用 .NET Framework 版本 1.1,您可以在 Machine.config 或 Web.config 中设置 ASP.NET 的信任级。这些信任级使用代码访问安全性,以限制 ASP.NET 应用程序可以访问的资源,例如文件系统、注册表、网络、数据库等。此外,它们还提供了应用程序隔离。
有关从 ASP.NET 使用代码访问安全性、开发部分信任的 Web 应用程序和沙箱化特权代码的详细信息,请参阅“在 ASP.NET 中使用代码访问安全”单元。
有关代码访问安全性的基础的详细信息,请参阅“代码访问安全实践”单元。
有关在开发托管代码时需要考虑的代码访问安全性问题的详细信息,请参阅“构建安全的服务组件”、“构建安全的 Web 服务”、“构建安全的远程组件”和“构建安全的数据访问”等单元的“代码访问安全注意事项”部分。
如何编写具有最低权限的代码
可以限制代码能够执行的操作,这与运行该代码所使用的帐户无关。通过配置策略或如何编写代码,您可以使用代码访问安全性来限制代码允许被访问的资源和操作。如果代码不需要访问某种资源或执行某种敏感操作(如调用非托管代码),可以使用声明性安全属性来确保代码不会被管理员授予这种权限。
有关更多信息,请参阅 “代码访问安全实践”单元。
如何限制文件 I/O
可以使用代码访问安全性来限制程序集访问文件系统区域和执行 I/O 的能力。例如,可以限制某个 Web 应用程序,使它只能在它的虚拟目录层次结构下执行文件 I/O。您也可以将文件 I/O 限制在特定的目录上。这可以通过编程或配置代码访问安全策略来完成。
有关更多信息,请参阅“代码访问安全实践”单元的“文件 I/O”和“在 ASP.NET 中使用代码访问安全”单元的“媒体信任”。有关配置代码访问安全策略的详细信息,请参阅“如何使用 CAS 策略约束程序集”。
如何防止 SQL 注入
使用数据访问的参数化存储过程。使用参数要确保输入值的类型和长度都得到检查。参数也被视作安全文本值和数据库内的不可执行代码。如果不能使用存储过程,就使用带有参数的 SQL 语句。不要通过连接 SQL 命令和输入值来构建 SQL 语句。还要确保应用程序使用具有最低权限的数据库登录,以限制它在数据库中的功能。
有关 SQL 注入的详细信息和进一步对策,请参阅“构建安全的数据访问”单元的“SQL 注入”。
如何防止跨站点脚本编写
对输入类型、长度、格式和范围进行验证,并对输出进行编码。如果输出包括输入(包括 Web 输入),则对输出进行编码。例如,对窗体字段、查询字符串参数、cookie 等进行编码,以及对从无法假定其数据是安全的数据库(特别是共享数据库)中读取的输入进行编码。对需要以 HTML 返回客户端的自由格式输入字段,对输出进行编码,然后选择性地清除在许可元素(如用于格式化的 <b> 或 标记)上的编码。
有关更多信息,请参阅“构建 ASP.NET 页和控件”单元的“跨站点脚本编写”。
如何管理机密
最好寻找避免存储机密的替代方法。如果必须存储它们,则不要在源代码或配置文件中以明文的方式存储。使用数据保护应用程序编程接口 (DPAPI) 加密机密,以避免关键的管理问题。
有关更多信息,请参阅“构建安全的 ASP.NET 页和控件”单元的“敏感数据”、“构建安全的程序集”单元的“加密”和“保证 ASP.NET 应用程序的安全”单元的“Aspnet_setreg.exe 与进程、会话和标识”。
如何安全地调用非托管代码
特别注意传递给非托管 API 和非托管 API 传递出的参数,防止潜在的缓冲区溢出。验证输入和输出字符串参数的长度,检查数组边界,并特别小心文件路径的长度。在断言非托管代码权限之前,使用自定义权限声明保护对非托管资源的访问。如果用 SuppressUnmanagedCodeSecurityAttribute 提高性能,请小心使用。
如何执行安全的输入验证
对输入进行限制、拒绝和清理,因为验证已知有效类型、模式和范围的数据要比通过查找已知错误字符来验证数据容易得多。验证数据的类型、长度、格式和范围。对字符串输入,请使用正则表达式。要使用执行类型检查,则使用 .NET Framework 类型系统。有时候,可能需要对输入进行清理。一个例子是对数据编码,以保证其安全性。
有关输入验证设计策略,请参阅“设计安全 Web 应用程序的指导方针”单元的“输入验证”。有关实现细节,请参阅“构建安全的 ASP.NET 页和控件”、“构建安全的 Web 服务”、“构建安全的远程组件”和“构建安全的数据访问”单元的“输入验证”部分。
如何保证窗体身份验证的安全性
划分 Web 站点,隔离匿名用户可以访问的公共可访问页面和需要身份验证访问的限制性页面。使用安全套接字层 (SSL) 来保护窗体身份验证凭据和窗体身份验证 cookie。限制会话生存时间和确保身份验证 cookie 只在 HTTPS 上传输。对身份验证 cookie 加密,不要在客户端计算机上保留它,也不要将其用于个性化目的;对个性化使用单独的 cookie。
Web安全解决方案的更多相关文章
- Spirit - 腾讯移动 Web 整体解决方案
Spirit 并不是一个具体的框架或者工具,但是她是移动端一系列解决方案的整合与聚拢.她是腾讯 Alloyteam 开发团队在移动开发项目中通过大量实践.归纳.总结提炼而成,最终沉淀下来的一个体系,真 ...
- 实现SVN与WEB同步解决方案(转)
实现SVN与WEB同步解决方案 1)设置WEB服务器根目录为/www/default 2)checkout一份SVN svn co svn://localhost/oplinux /www/defau ...
- 《精通CSS:高级Web标准解决方案》学习笔记(上)
鉴于国产CSS书籍基本都是辣鸡的现状,我在半年前动用某工作室的购书资金采购了一些技术书籍,这本广受好评的<精通CSS>也在其中.但是在阅读过后我深深的感觉到,如果说CSS本来已经是一种很琐 ...
- CassiniDev源码学习 - 可替代IIS的单机Web Form解决方案
最近一个项目是将web版的程序,改为单机版.话说这个web版号称当年十几个人用了至少3个月的时间开发,后来三年还不断有修改,而现在要在1个月内由一个人完成,这简直是不可能完成的任务!直觉告诉我,重写肯 ...
- (转)unity web 缓存解决方案
unity web 缓存解决方案 官方发布 web版限制五十M缓存,根据自己的经验绕了过去,解决了缓存的问题.带工程,带源代码.由于本人的水平也有限,是用JS来解决的,如果你还是没有头绪,可以购买来试 ...
- VS2015 无法启动 IIS Express Web 服务器 解决方案
VS2015 IIS Express 无法启动Web 解决方案 [亲测已成功] 1.我的电脑—管理—事件查看器—Windows日志—应用程序: 详细信息会提示你:[模块 DLL C:\Program ...
- web网络攻击解决方案
原文地址:https://www.xingkongbj.com/blog/http/web-attack.html 产生原因 HTTP 不具备安全功能. 在客户端可以篡改请求. 跨站脚本攻击 XSS ...
- 移动端web常见问题解决方案
meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 忽略将页面中的数字识别为电话号码 忽略Android平台中对邮箱地址的识别 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对i ...
- 腾讯移动Web整体解决方案Spirit
Spirit(勇气号),美国航天局NASA派往Mars(火星)的第一艘探测器.移动Web开发是一块新的领域,甚至有很多坑,这一点与人类从未踏上的Mars(火星)相似.为了避免开发者重复遇到相同的问题, ...
- Web缓存解决方案
缓存是构建于HTTP统一接口之上的最有用功能之一.可以利用缓存减少终端用户感知到的延时,增加可靠性,减少带宽使用和成本,降低服务器负载.缓存无处不在,可以在服务器网络里,内容分发网络(Content ...
随机推荐
- 洛谷 P2759 奇怪的函数
https://www.luogu.org/problemnew/show/P2759 #include<cstdio> #include<algorithm> #includ ...
- 洛谷 P2147 [SDOI2008]洞穴勘测
以下这个做法应该是叫线段树分治... 根据修改操作预处理出每条边存在的时间区间[l,r](以操作序号为时间),然后把所有形式化后的修改挂到线段树节点上. 处理完修改后,dfs一遍线段树,进入某个节点时 ...
- oracle 查看未关闭连接
查看连接状态.问题电脑等信息: select sid,serial#,username,program,machine,status from v$session; 2.查看sql; select ...
- Django 开发blog未完待续
[root@sishen simpleblog]# python3.5 Python 3.5.4 (default, Sep 20 2017, 20:37:45) [GCC 4.4.7 2012031 ...
- Unity3d中UnityEngine.Object
UnityEngine.Object继承自system.Object,是Unity所涉及所有物体的基类. Static Functions 静态函数 下面的都是静态函数 Destroy Remov ...
- javascript回调函数那些事~
什么是回调函数? 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直 ...
- macOS 的 JDK 安装问题 (Homebrew)
Homebrew 介绍 Homebrew 是 macOS 下的一个非常好用的包管理工具, caskroom 则是基于 Homebrew 构建的一个强大的应用程序管理器. 具体用法可以餐参考 像 Mac ...
- re正则表达式公式讲解3
1.分组匹配 用()把需要分组的类型括起来,如下 import re m = re.search("([a-z]+)([0-9]+)","alex123" ...
- Jenkins+Ant+Jmeter搭建轻量级接口自动化
软件准备 本文所用软件版本如下: Jenkins2.176.1 Tomcat9.0.21 Ant1.9.14 Jmeter5.1.1 我已经把相应的软件上传到我的网盘中,下载地址如下: 下载链接:ht ...
- Kotlin学习的一些心得
1.工程manifest中的application节点有冲突时,添加 xmlns:tools="http://schemas.android.com/tools" tools:re ...