如何使用Microsoft .NET保护应用程序和数据的安全

如何使用Microsoft .NET保护应用程序和数据的安全

 

身份验证

 

l         使用Credential来唯一标明一个用户

l         可以使用Microsoft Windows的集成身份验证,使用用户登录Windows时的用户凭证

l         编写自己的用户身份验证的程序,应用程序来管理用户凭证。

l         System.Security.IIdentity接口和System.Secutity.GenericIdentity

l         System.Security.Principal.WindowsIdentity.
GetCurrent().Name

 

Authorization

 

l         使用基于角色的安全

l         可以通过编程实现基于角色的授权

l         角色可以代表商业流程中的工作职责,例如:秘书、经理、管理员、总监等

l         用角色的方式来管理用户会更加简便

 

如何使用基于角色的安全

 

l         PrincipalPermissionAttrivuteSecurityAction.Demand

[PrincipalPermission(SecurityAction.Demand,
Authenticated:=True,
Name:=Nothing, Role:=“Administrator”)]

Public Class AdminClass

l         IPrincipal.isInRole()

lblBossMan.Visible = Context.User.IsInRole(“BossMan”)

tbToBeChangedOnlyByQueenBee.ReadOnly =! Context.User.IsInRole(“QueenBee”)

 

加密

 

l         加密将字节打乱

l         对称加密与非对称加密

n         对称加密适用一个相同的密钥进行加密/解密

n         非对称加密使用一个密钥对进行加密/解密,加密与解密的密钥是不同的(公钥/私钥对)

n         非对称加密算法更加安全

n         对称加密算法更加高效

l         System.Security.Cryptography名称空间

l         如何进行密钥管理

 

Code Access Security

 

n         最低权限的策略

n         Code Group——按照逻辑分类的代码组合

n         Code Group可以按照多种方式划分URLstrong namezoneetc

n         Permission Sets——许可集,用来定义代码能够访问的资源:文件I/OIsolated Storage独立存储,SQL客户端,等等。

n         Link demands

 

强命名应用程序集

 

n         使用sn.exe工具来创建强命名公钥/私钥对,并存储在文件当中:
sn.exe
k Northwind.snk

n         AssemblyKeyFileAttribute
<Assembly: AssemblyKeyFile( “c:/keys/Northwind.snk”)>

n         优势

n         可以被装载到GAC当中

n         Side-by-side部署,支持多个版本的应用程序集

n         在编译时,.NET的客户端代码使用了强命名应用程序集,在运行时能够有效地防止装入“木马”应用程序集

 

Delayed Signing

 

n         私钥保密性,确保开发团队中的多个组建使用相同的强命名

n         只导出公钥
sn -p Northwind.snk NorthwindPublicOnly.snk
<Assembly: AssemblyKeyFile(
c:/keys/NorthwindPublicOnly.snk)>
<Assemble: AssemblyDelaySign(True)>

n         Sn -Vr <assemblyname>:关闭对只拥有公钥的强命名应用程序集进行验证

n         Sn -R <assemblyname> <keyfilename>:在发布之前对应用程序集进行缓签名

 

Link Demands

 

n         连接请求发生在外部的代码对本应用程序集进行调用的时候

n         System.Security.Permissions名称空间

n         例如:StrongNameIdentityPermission属性

n         从某个应用程序集中提取公钥标示(一个十六进制的字符序列)
sn -Tp NorthwindModel.dll//
生成下面需要的PublicKey

n         例如:
StrongNameIdentityPermission( SecurityAction.LinkDemand, PublicKey:=
002400000d 6 , Version:= 1.0.0 .0)

 

SQL注入

 

n         SQL注入这种威胁发生在动态生成SQL查询语句的时候,动态生成的SQL语句可能会被篡改

例如:
string sql =
select * from users where UserID = ‘” +
UserID +
“’ and password=‘” + Password + “’”

n         如果在上面的SQL语句中加入’OR 1 = 1 这个条件,users表中的所有数据将最为结果返回

n         所有使用动态SQL查询的应用程序都有可能受到这种威胁,为了防御这种攻击,去掉所有的动态SQL查询:
使用ADO.NET中的SqlParameters

 

安全设计目标

 

n         最小化攻击范围

n         分析具体的攻击并阻止它们:

n         拒绝服务攻击

n         基于文件或目录的攻击

n         SQL注入

n         引诱攻击(Luring

n       防患于未然,提早预知新的攻击

n       使用经过验证的安全技术:身份验证,给予角色的授权,HTTPS,加密

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值