CAS 代码访问安全性二 (翻译)

试一下下面的代码,我们之前没有使用security命名空间,但是我们现在来用用看。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using System.Security;
using System.Security.Permissions;

添加另一个button到已经存在的form上。


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->private void btnFileRead_Click(object sender, System.EventArgs e)
{
    
try
    {
        InitUI(
1); 
    }
    
catch (SecurityException err)
    {
        MessageBox.Show(err.Message,
"Security Error");
    }
    
catch (Exception err)
    {
        MessageBox.Show(err.Message,
"Error");
    } 
}

InitUI只是调用ShowUI函数。记住它已经被拒绝了对c盘的读操作。


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->// Access is denied for this function to read from C: drive
// Note: Using declrative syntax
[FileIOPermission(SecurityAction.Deny,Read="C:\\")]
private void InitUI(int uino)
{
    
// Do some initializations
    ShowUI(uino);    // call ShowUI
}

ShowUI函数得到uino显示适当的UI


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->private void ShowUI(int uino)
{
    
switch (uino)
    {
        
case 1// That's our FileRead UI
            ShowFileReadUI();
            
break;
        
case 2:
            
// Show someother UI
            break;            
    }
}

ShowFileReadUI显示与读文件有关的UI

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->private void ShowFileReadUI()
{
    MessageBox.Show(
"Before calling demand");
    FileIOPermission myPerm 
= new 
      FileIOPermission(FileIOPermissionAccess.Read, 
"C:\\");
    myPerm.Demand();
       
// All callers must have read permission to C: drive
      
// Note: Using imperative syntax
      
    
// code to show UI
    MessageBox.Show("Showing FileRead UI");
    
// This is excuted if only the Demand is successful.
}

我知道这是一个槽糕的例子,但是它已经足够了。

现在运行我们的代码。你会得到一个“Before calling demand”的消息,然后跳出一个自定义的错误对话框“security error”。哪里错了呢?看下面的图片:


【图11

我们已经禁止了InitUI方法的读的权限。所以当ShowFileReadUI请求对c盘的写的权限的时候,它检查堆栈的时候找到不是每个调用者都被允许这个demanded permission,显示一个异常。只需要注释在InitUI方法里面注释Deny statement, 它就可以工作了,因为所有的调用者都有demandedpermission

 

注意,根据文档,许多.NET Framework的类已经有了demands关联它。例如StreamReaderStreamReader自动需要FileIOPermission.所以用其他demand去替换它会导致一个堆栈的错误。

Link Demand

一个link demand只检查你的代码的直接调用者。那意味者它不会对堆栈起作用。当你的代码跳到一个典型的引用,包括函数指针引用和方法调用会发生link。一个link demand只能用申明的方式。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[FileIOPermission(SecurityAction.LinkDemand,Read="C:\\")]
private void MyMethod()
{
    
// Do Something 
}

Inheritance Demand

Inheritance Demand能过被类和方法应用。如果它用到一个类上,所有从它继承的类都具有它的permission

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[SecurityPermission(SecurityAction.InheritanceDemand)]
private class MyClass()
{
    
// what ever
}

如果它用到一个方法上,所有继承它的类必须制定permission去重写那个方法。


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->private class MyClass()
{
    
public class MyClass() {}
    
    [SecurityPermission(SecurityAction.InheritanceDemand)]
    
public virtual void MyMethod()
    {
        
// Do something
    }
}

就像link demandinheritance demand也只能用声明的方式。

Requesting Permissions

想象一个场景。你给一个用户一个form其中包含有20多个field去填充,所有的信息必须保存在一个text文件中,用户填充了所有的信息,当他要保存的时候,他得到了一个信息,他没有足够的权限去创建一个文件。当然你可以试图沉静的告诉他为什么会发生这个,因为我们调用堆栈的时候...因为一个demand。。如果你足够幸运,你可以从microsoft那得到这个警示(相信我...有时他确实会发生)。

 

你在装载装配的时候请求permission的优先级是否比较容易呢?这里有3种方法去做他在CAS中。

  • RequestMinimum

  • RequestOptional

  • RequestRefuse

注意这些只能用声明的语法应用在装配的级别,而不是应用给方法或者是类。最棒的是管理员可以在装配之后查看请求的permissions,使用permview.exe你可以查看它所被赋予的permissions

RequestMinimum

你可以使用requestMinimum去指定permissions。代码只允许在所有permissions都被赋予的时候才能够跑。在下面的代码片段中,有一个请求去写注册表的请求。如果这个没有被安全机制赋予权限,这个装配甚至不会被装载。就像之前提到的,这种请求能够在装载的时候完成。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using System;
using System.Windows.Forms;
using System.IO;

using System.Security;
using System.Security.Permissions;

// placed in assembly level
// using declarative syntax
[assembly:RegistryPermission(SecurityAction.RequestMinimum, 
         Write
="HKEY_LOCAL_MACHINE\\Software")]

namespace SecurityApp
{
    
// Rest of the implementation
}

RequestOptional

使用RequestOptional,你能指定你的代码所需要的permissions,而不是跑的时候才请求。如果你的代码没有被赋予optional permissions,你必须处理代码片段在执行时需要optional permissions而抛出的异常。这里有一些在使用requestOptional时必须注意的事情

如果你使用RequestOptionalRequestMinimum,除了他们两再没有其他的permissions将被赋予,如果被安全机制所允许。尽管安全机制允许添加permissions到你的装配集,他们将不会被赋予。看下面的代码片段:

[assembly:FileIOPermission(SecurityAction.RequestMinimum, Read="C:\\")]

[assembly:FileIOPermission(SecurityAction.RequestOptional, Write="C:\\")]

这个装配集的permissions只是对文件系统的读和写。是否还需要显示UI?然后这个装配集被装载,但是一个异常被抛出,当显示UI的代码被执行的时候,因为尽管安全机制允许UIPermission,但是它没有被装配集允许。

RequestRefuse

你可以使用RequestRefuse去指定你确定不需要被赋予的permissions在你的代码中,即使他们已经被安全机制赋予了,然后拒绝写的permission将保证你的代码不会被滥用

[assembly:FileIOPermission(SecurityAction.RequestRefuse, Write="C:\\")]






Java分布式流处理,flink+kafka实现电商网站个性化商品推荐系统 在现代电商环境中,用户每天都会浏览大量商品页面,而这些行为数据中蕴藏着丰富的信息。通过分析用户的浏览历史、购买记录以及对特定商品的兴趣程度,我们可以为用户提供更加个性化的商品推荐,从而提升用户体验和转化率。为了实现实时的个性化推荐,我们需要构建一个能够快速处理并响应用户行为变化的数据处理管道。 阅读详情

相关推荐

OpenCV实战之人脸美颜美型(八)——大眼(上)

从大众审美的角度来看,眼睛适当的“变大”会让人显得更加年轻。因此美型中就有一项大眼功能,其效果就是让眼睛适当变大,这章内容就围绕着大眼算法展开。

On my way 1173

线程安全之CAS机制详解(分析详细,通俗易懂)

背景介绍:假设现在有一个线程共享的变量c=0,让两个线程分别对c进行c++操作100次,那么我们最后得到的结果是200吗? 1.在线程不安全的方式下:结果可能小于200,比如当前线程A取得c的值为3,然后线程A阻塞了,线程B取得的c的值也是3,然后线程B也阻塞了,现在线程A被唤醒执行了++操作使得c=4,结果写回c值内存,线程A执行结束,线程B被唤醒执行了++操作使得3++=4,也写回了c值内存,现在问题来了,两个线程分别进行了一次++操作,最后c值却为4而不是5,所以c值最后的结果肯定是小于200的,产

mijichui2153的博客 1887

拒绝访问异常处理(AccessDeniedException)_spring security例子

拒绝访问异常处理(AccessDeniedException)_spring security例子 博客:blog.csdn.net/dsundsun

代码访问安全(code-access security

.NET 安全性 (security) 提供了两种安全模型,一个是code-access security (简称 CAS) ,另外一个是role-based security,前者是用来控制程序的行为,后者是用来控制使用者的行为。而本文讲的是CASCAS让开发者和管理员可以实现对代码有权访问的那些资源进行精确的控制,它也被称为evidence-based security。 1. ...

weixin_30659829的博客 167

【Java并发编程】CAS详解和并发安全问题

CAS详解和学透面试必问并发安全问题

持续学习,坚持原创,分享技术笔记及经验。 504

CAS安全介绍

<br />CAS安全性是一个非常重要的Topic。CAS从v1到v3,都很依赖于SSL,它假定了这样一个事实,用户在一 个非常不安全的网络环境中使用SSO,Hacker的Sniffer会很容易抓住所有的Http Traffic,包括通过Http传送的密码甚至Ticket票据。<br />TGC/PGT 安全性        对于一个 CAS 用户来说,最重要是要保护它的 TGC ,如果 TGC 不慎被 CAS Server 以外的实体获得, Hacker 能够找到该 TGC ,然后冒充

Edwin’s Blog 1608

使用Element-UI中的el-cascader 实现可以任意选择一项,以及遇到的坑

现在我们要求可以选择任意一项,查阅官方文档 发现 使用 就可以达到我们的效果,但是 注意重点来了...至于原因 大家可以看这个 (13条消息) elementUi Cascader 级联选择器如何选择任意一级,以及所遇到的问题_WhiteSean的博客-CSDN博客_elementui级联选加载一级上边介绍的方法并没有什么卵用,大家只参考原因就行了,方便大家发散思维。既然知道了原因那么解决起来也是事半功倍看一下代码: 最主要的就是上边三句代码,那这三句怎么实现即要隐藏单选框又要把选择器收起呢,

m0_61317636的博客 6425

CAS 代码访问安全性 (翻译)

前言: 用vs2005 + vsto 开发一个outlook的addin的时候,碰到了一个问题,在我机器上运行的好好的程序,用vs自己的打包安装程序安装到别的机器的时候总是显示 not load, 加载程序的时候出错。google了一下,遇到了一个新名词, CAS: code access security. 找不到相关的中文文档。在codeproject上看到了这篇文章。文章比较长,有codep...

eteran的专栏 299

JASIG CAS协议介绍 (1)-CAS Entities

1.           Introduction 以下是 CAS1.0 和 2.0 协议的官方规范。 注: CAS1.0 和 2.0 协议大体包含两个方面的内容:各种票根( Ticket )和暴露给 CAS 客户的 HTTP ( S ) URL 。这些 UPL ( /login 、 /logout 、 /validate 、 /serviceVa

4268

Java中CAS详解

什么是CASCAS为什么比Synchronized性能好,CAS实现原理是什么,什么是自旋锁,CAS有什么缺点?什么是ABA问题,又是怎么解决ABA问题,本篇文章一一详解。

全栈行动派的博客 1238

CAS之比较并交换

多线程环境 使用原子类保证线程安全(基本数据类型) 2. CAS是什么 compare and swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它包含三个操作数——内存位置、预期原值及更新值。 执行CAS操作的时候,将内存位置的值与预期原值比较: 如果相匹配,那么处理器会自动将该位置值更新为新值, 如果不匹配,处理器不做任何操作,多个线程同时执行CAS操作只有一个会成功。 CAS有3个操作数,位置内存值V,旧的预期值A,要修改的更新值B。 当且仅当旧的预期值A和内存值V相同时,将内存

Lifelong learning 4329

cas如何实现多系统间的相互认证_一篇文章彻底弄懂CAS实现SSO单点登录原理

专注于Java领域优质技术号,欢迎关注作者:寒夕若梦1. CAS 简介1.1. What is CASCAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG ...

weixin_42514433的博客 1687

CAS实现SSO单点登录原理

1. CAS 简介 1.1. What is CASCAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。 CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。 1.2. 主要特性 1、 开源的、多协议的 SSO 解决方案; Protocols : Custom Protocol 、 CAS

jacklin_01的博客 517

【无标题】CTK-Plugin框架在CAS程序中应用教程(翻译

CTK插件框架介绍和使用示例。The CTK-Plugin Framework in CAS Applications-A Tutorial.pdf

tao_xs的博客 1362

单点登录 cas 设置回调地址_一篇文章彻底弄懂CAS实现SSO单点登录原理

专注于Java领域优质技术号,欢迎关注作者:寒夕若梦1. CAS 简介1.1. What is CASCAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG ...

weixin_39539588的博客 1889

cas单点登录(实现了SSO架构)

portal门户模块 security安全模块 doc doc数据库表、SQL文件、war包等等 cas单点登录(实现了SSO架构) cas(具体)是实现sso(抽象)的一种手段 SSO 是英文 Single Sign On 的缩写,翻译过来就是单点登录。顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果。 单点登录(SSO)思路(多个产品都是在一个域名下) 用户访问产品 a,向 后台服务器发送登录请求。 登录认证成功,服务器把用户的登录信息写

fanzhe的博客 4593

1981-2021年《中国农业年鉴》合集-最新出炉.zip

1981-2021年《中国农业年鉴》合集-最新出炉.zip

上一篇: CAS 代码访问安全性 (翻译)
下一篇: 加解密字符串和字符编码的一些误区
eteran
博客等级 码龄20年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值