ASP.NET 2.0中的alwaysFlowImpersonationPolicy


才读完微软ASP.NET产品组项目经理Stefan Schackow 撰写的《Professional ASP.NET 2.0 Security, Membership, and Role Management》的第二章,就觉得买书花的钱已经值了。

ASP.NET中身份的问题很复杂,我了解的知识大都来自Keith Brown的“A Tale of Three Security Contexts in ASP.NET”一文。Stefan Schackow 在第二章“Security Processing for Each Request”中,清晰地勾画出在每次请求中,特别是在与认证和授权模块相关的事件里,在不同的IIS安全设置,配置文件设置,以及是否部署在UNC共享目录里等各种情形下,当前操作系统线程的身份,IIS的身份令牌,当前托管线程的CurrentPrincipal,以及HttpContext.Current.User身份,是如何配置以及演变的。

其中特别提到了在异步操作中,身份是如何配置的,应该如何手工流动,但他指出ASP.NET 2.0 提供了把处理当前请求的操作系统线程的身份自动流动到异步线程上去的功能,只要把%WINDIR%\Microsoft.NET\Framework\v2.0.50727\aspnet.config文件中的2个节点改成

<legacyImpersonationPolicy enabled=”false“/>
<alwaysFlowImpersonationPolicy enabled=”true“/>

即可!

.NET 点滴

1。[来源:Scott Guthrie] ASP.NET 2.0 Providers的源码供下载了,很多人都报道这个消息了,这绝对是个好消息

http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi

如果你对Provider模型不熟,可以参考MSDN上的系列文章

Microsoft ASP.NET 2.0 Providers: Introduction
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/asp2prvdr01.asp

Jeff Prosise写的ASP.NET2.0 Provider Model: Introduction to the Provider Model
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnetprovmod_intro.asp

2。Atlas开发组的Bertrand Le Roy对Atlas浏览器兼容层的解释
http://weblogs.asp.net/bleroy/archive/2006/04/13/442815.aspx

“。。。一般来说,使Javascript类库跨浏览器兼容有三种方式:

  • 每次调用时你都检查浏览器是否支持某些功能。这么做的话,所有新的编码都要考虑所有的浏览器,添加一个新的浏览器需要修改所有的编码库
  • 你写一个抽象层,建立另一套的API来抽象每个浏览器的具体API,跟其他两种方式相比,这种做法并不标准,因为你实际上是在现有的标准API和浏览器开发商自己的API之上又建立了一套新的非标准API。而且,这也使得编码调用路径更长了,因为每次API调用需要经过额外的函数调用,而且每次调用还必须检测浏览器是否支持
  • Atlas的做法,你扩展其他的浏览器使得所有的浏览器都拥有一致的API,这样,编码调用路径是最直接的,而且兼容层生成时,只要做一次浏览器检测。这个做法另外的好处是,你每次添加一个新的浏览器,只要写它的兼容层就可以了,而不需要碰实际使用的Javascript类库

。。。”

3。 袁峰大侠的Windows Graphics Programming经典著作重印版出来了

http://blogs.msdn.com/fyuan/archive/2006/04/15/576934.aspx

4。 Mikhail Arkhipov 开发了一个能检查拼法的Visual Studio add-on

Spell Checker for HTML and ASP.NET pages
http://blogs.msdn.com/mikhailarkhipov/archive/2006/04/17/577471.aspx

5。 英国的Phil Winstanley的新技术列单,要学的东西太多了,真是学不过来

New Technology Shopping List
http://weblogs.asp.net/Plip/archive/2006/04/16/443059.aspx

.NET 点滴

1。[来源:Delay’s Blog] ASP.NET/ATLAS产品组推出Atlas Control Toolkit以进一步简化开发AJAX应用

http://atlas.asp.net/default.aspx?tabid=47&subtabid=477

其中包括关联DropDownList,可收缩的Panel,确认按钮,可拖拉Panel,悬浮菜单,Popup控件,可排序列单,带水印的文字输入框,可切换按钮等9个控件。Atlas Control Toolkit示范页上还提供了怎么使用以及怎么生成类似控件的指导

2。 [来源:Harald Leitenmüller’s WebLog] Visual Studio 2005 Team System 在线培训资源

http://msdn.microsoft.com/vstudio/teamsystem/expand/

包括一系列的教学录像,webcast,技术文章

[来源:Sean McBreen’s WebLog] 另外这个页上的webcast示范了Team System的各种功能

Visual Studio Team System On-Demand Webcasts
http://msdn.microsoft.com/vstudio/teamsystem/community/webcasts/default.aspx

3。微软IIS7产品组的David Wang(这里有他和IIS7产品组的照片)教你怎么设置IIS来提供3000个并发连接来做类似server push的事情

HOWTO: Maximize the Number of Concurrent Connections to IIS6
http://blogs.msdn.com/david.wang/archive/2006/04/12/HOWTO_Maximize_the_Number_of_Concurrent_Connections_to_IIS6.aspx

4。苔丝又出手

如果你在多个应用里使用同个程序集,应该把程序集强名化后加到GAC里
ASP.NET Memory: You use the same dll in multiple applications, is it really necessary to load it multiple times?
http://blogs.msdn.com/tess/archive/2006/04/13/575357.aspx

强名程序集不该放在应用的bin目录里
ASP.NET: Strong named assemblies should not be stored in the bin directory
http://blogs.msdn.com/tess/archive/2006/04/13/575361.aspx

在生产环境下,别设置debug=true,否则问题多多
ASP.NET Memory: If your application is in production… then why is debug=true
http://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx

应该设置

<configuration>
    <system.web>
          <deployment retail=”true”/>
    </system.web>
</configuration>

Scott Guthrie对此问题也写了专文,提到的问题包括编译时间变长,运行慢,消耗内存多,来从WebResources.axd的脚本/图片资源不被缓存等

Don’t run production ASP.NET Applications with debug=”true” enabled
http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx

5。Javascript rules?

大家都知道,AJAX运动的主角是Javascript,但仔细看一下,目前几大家的Gadget/Widget技术也都是基于Javascript的

微软Vista上的Sidebar:
Gadget Development Overview
http://microsoftgadgets.com/Sidebar/DevelopmentOverview.aspx

Google的Homepage API:
Google Homepage API Developer Guide
http://www.google.com/apis/homepage/guide.html

雅虎的Widgets:
Yahoo! Widget Engine Reference Guide
http://widgets.yahoo.com/workshop/

一组数据摘要算法的效率测试

一、数据摘要算法概述

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash)算法或散列算法。

常用的数据摘要算法主要以下几大类:

1、CRC8、CRC16、CRC32

CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产生一个4字节(32位)的校验值,一般是以8位十六进制数,如FA 12 CD 45等。CRC算法的优点在于简便、速度快,严格的来说,CRC更应该被称为数据校验算法,但其功能与数据摘要算法类似,因此也作为测试的可选算法。

在 WinRAR、WinZIP 等软件中,也是以 CRC32 作为文件校验算法的。一般常见的简单文件校验(Simple File Verify – SFV)也是以 CRC32算法为基础,它通过生成一个后缀名为 .SFV 的文本文件,这样可以任何时候可以将文件内容 CRC32运算的结果与 .SFV 文件中的值对比来确定此文件的完整性。

与 SFV 相关工具软件有很多,如MagicSFV、MooSFV等。

2、MD2 、MD4、MD5

这是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4发展而来,由Ron Rivest(RSA公司)在1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生16字节(128位)的校验值,一般用32位十六进制数表示。MD2的算法较慢但相对安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。

目前在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为 .md5或.md5sum),这样接收者在接收到文件后,就可以利用与 SFV 类似的方法来检查文件完整性,目前绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。

与MD5 相关的工具有很多,如 WinMD5等。

3、SHA1、SHA256、SHA384、SHA512

SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构—— 美国国家标准技术研究院(NIST)制定的,SHA系列算法的摘要长度分别为:SHA为20字节(160位)、SHA256为32字节(256位)、SHA384为48字节(384位)、SHA512为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。

目前SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在目前互联网中流行的BT软件中,也是使用SHA1来进行文件校验的。

4、RIPEMD、PANAMA、TIGER、ADLER32 等

RIPEMD是Hans Dobbertin等3人在对MD4,MD5缺陷分析基础上,于1996年提出来的,有4个标准128、160、256和320,其对应输出长度分别为16字节、20字节、32字节和40字节。

TIGER由Ross在1995年提出。Tiger号称是最快的Hash算法,专门为64位机器做了优化。

二、常用数据摘要算法的测试

1、测试方法

  • 测试范围:常见的数据校验、摘要算法,主要有 CRC32、MD5、SHA1、SHA256、SHA384、SHA512
  • 样本数据:2G大小Vmware 虚拟机操作系统的磁盘文件,其中包含其中各种类型的文件,如二进制文件和文本文件等。
  • 软件平台:Windows、.NET Framework 2.0
  • 硬件平台
    • 机器A(SCSI Disk):软件配置 Windows 2000 + .Net Framework 2.0;硬件配置 CPU:4 (Xeon),2.8G,RAM:2G ,HD:70 GB SCSI
    •  机器B(IDE Disk):软件配置 Windows 2003 + .Net Framework 2.0;硬件配置 CPU:1 (P4),2.8G,RAM:1G,HD:40 GB IDE

 

考虑到整个测试过程只是涉及到文件读取与哈希值的计算,并无过多的与操作系统、软件平台、开发语言相关的操作,因此可以认为上述测试方法的结果具有普遍性,即也适用于其它操作系统平台(如Linux/Unix)或应用语言/平台(C、Java)。

2、测试结果

1)不同配置机器间的对比

在不同机器配置上的平均运算结果如下表所示:

 

注1:配有SCSI磁盘的机器运行时间反而比 IDE 磁盘时间长,可能是由于前者具有较多的应用负载造成的,如Oracle、WebSphere等,而且其OS为 Windows 2000,在之上运行 .NET 应用程序可能与 Windows 2003 的效率有所差别

注2:上述算法中,只有 CRC32 没有包含在.NET Framework 中,而是使用C#单独实现的,因此可能会对其测试结果带来一些影响。

 

2)不同算法的CPU占用率比较

在不同的算法运行时,在机器B上监控其对于 CPU 的平均使用时间,结果如下表所示:

三、一些测试结论

  • 数据摘要算法的处理是很快的,在一般配置的PC机上使用MD5算法,处理1G的文件数据只需20-30秒(有些专用设备声称达 3GB/秒),不会对应用或机器带来过多负载;
  • MD5、SHA1虽然被发现存在缺陷(碰撞),但在近几年内,仍然可以大量使用;
  • SHA256/384/512 的速度较慢,可以用于少量数据摘要,目前不适合用于大文件校验;

注:测试程序相当简单,也写得很烂,有需求者可以在 Comment  中提出。

.NET 点滴

1。 [来源:Jesús Rodríguez] W3C发布针对XMLHttpRequest的工作草案

The XMLHttpRequest Object
http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/

2。 [来源:Federal Developer Weblog] Internet Explorer Developer Toolbar

该套工具能帮助开发人员很快地生成网页,理解和排除网页的问题,功能包括,查看和改变网页的DOM模型,有选择地禁止Internet Explorer 设置/清除缓存和cookie,验证HTML/CSS/RSS等等

http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en

3。 对ASP.NET开发人员很有用的另外一个调试工具是Nikhil Kothari的Web Development Helper,能在单独的窗口查看请求/回复的URL/状态/时间,trace information以及 view state等

Web Development Helper
http://www.nikhilk.net/ASPNETDevHelperTool.aspx

4。 Sebastien St-Laurent的博客上贴出了《Practical .NET2 and C#2》一书的几个章节

An introduction to MSBuild
http://blogs.msdn.com/sebby1234/archive/2006/04/01/565084.aspx

C# 2.0 Nullable Types
http://blogs.msdn.com/sebby1234/archive/2006/04/03/565089.aspx

Writing C# 2.0 Unsafe Code
http://blogs.msdn.com/sebby1234/archive/2006/04/05/565090.aspx

Event programming with C#
http://blogs.msdn.com/sebby1234/archive/2006/04/07/565098.aspx

Chapter 5
http://blogs.msdn.com/sebby1234/archive/2006/04/09/565099.aspx

5。 如果你主管安全的话,那么下面这个玩意也许会让你睡不着觉的

Beyond Rootkits: World’s First Standalone Kernel Mode Bot?
http://www.emailbattles.com/archive/battles/virus_aaddcefedj_d/

Kernel Mode Ircbot
http://tibbar.blog.co.uk/2006/04/06/kernel_mode_IRCbot~708256