Spiga

Asp.net安全架构之2:Session hijacking(会话劫持)

2012-05-30 08:34 by Luminji, 1596 visits, 网摘, 收藏, 编辑
摘要:原理会话劫持是指通过非常规手段,来得到合法用户在客户端和服务器段进行交互的特征值(一般为sessionid),然后伪造请求,去访问授权用户的数据。获取特征值的非常规有段主要有如下几种:首先是猜测的方式,如果我们的sessionid的生成是有规律的,那么使用猜测的方式就可以到达非法获取的目的,如图所示:其次是session fixation攻击。session fixation攻击是指用户通过XSS、网络嗅探、本地木马来得到特征值,这些交互的特征值一般来说放置在浏览器的Cookie中(当然,我们也知道sessionid也可以通过URL来传递,这样的话,获取就简单多了)。然后诱使用户去完成一次登录 阅读全文

Asp.net安全架构之1:xss(跨站脚本)

2012-05-22 08:23 by Luminji, 1960 visits, 网摘, 收藏, 编辑
摘要:原理跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cookie信息。其原理如下图所示:XSS从攻击原理上,分为三类:1:反射型XSS 将用户输入“反射”回浏览器,即将用户的输入变成HTML传输回客户端。如: Response.Write(“<script&g 阅读全文

ASP.NET性能优化之负载均衡

2012-05-16 08:55 by Luminji, 2612 visits, 网摘, 收藏, 编辑
摘要:1:HTTP重定向所谓HTTP重定向,就是通过修改HTTP响应头中的Location标识为新的URL,然后返回给客户端,让客户端重新根据这个Location标识的URL去做新的请求。这是一种最简单、也是最轻量级的负载均衡实现方案,使用asp.net,我们可以这样来实现,比如在主站www.yourdomain.com中,我们在默认主页如下编码: static string[] servers = { "http://192.168.0.77/luminji2/aspx/test3.aspx", ... 阅读全文

基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计

2012-01-13 17:38 by Luminji, 685 visits, 网摘, 收藏, 编辑
摘要:AOP的特性使得它非常适合用来设计类似权限控制的功能,这是本文的基础,如果想要了解AOP的实现,可以参考《动态织入的AOP实现》。 在基于角色的访问控制(RBAC)中,有三要素:用户、角色、任务(或操作)(User、Role、Task),其稳定性逐渐增强,两个关系,User<->Role、Role<->Task,其中: User 是日常管理运行时建立 Role 是部署/交付建立 ... 阅读全文

动态织入的AOP实现

2012-01-10 15:48 by Luminji, 526 visits, 网摘, 收藏, 编辑
摘要:动态织入的AOP实现,有两种方法:第一类,借助于Remoting命名空间下的几个类,通过获取当前上下文及反射的机制来实现,这需要被AOP的类需要继承自arshalByRefObject或者ContextBoundObject;第二类,原理是基于动态代理的思想,即在运行时动态构造一个原有类的子类,这样就可以在子类的重载方法中插入额外代码。这两类方法,都有显著的不足,前者直接要求我们继承固定类,后者呢,除非父类方法被定义为virtual,或者方法定义于某个接口,否则就不能被重载,这就是得“拦截”并不是可以对任意的方法进行的。动态织入局限于CLR的限制,不能实现对任何方法进行AOP,如果要突破这个限 阅读全文

MVC TIP8:为控制器增加有参构造函数(为了注入等其它用途)

2011-12-22 18:04 by Luminji, 251 visits, 网摘, 收藏, 编辑
摘要:控制器本身是不带有参的构造函数的,如果我们为控制器仅仅提供有参的构造函数,就会报错。不过,可以利用DependencyResolver的SetResolver方法,让ASP.NET MVC支持有参的构造函数。 1:为系统准备两个类型,如下: 注意,这里要实现的是让控制器支持Unity注入。 UnityControllerFactory代码如下: public class Uni... 阅读全文

最精简领域驱动设计开发模版(针对WPF)

2011-12-16 15:57 by Luminji, 376 visits, 网摘, 收藏, 编辑
摘要:一:领域驱动中的分层领域驱动设计将软件系统分为四层:基础结构层、领域层、应用层和表现层。· 基础结构层:该层专为其它各层提供技术框架支持。注意,这部分内容不会涉及任何业务知识。众所周知的数据访问的内容,也被放在了该层当中,因为数据的读写是业务无关的。· 领域层:包含了业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型(Domain Model)。领域驱动设计提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。· 应用层:该层不包含任何领域逻辑,但它会对任务进行协调,并可 阅读全文

Unity TIP4: 带泛型参数的接口注入(interface,generic)

2011-12-15 16:25 by Luminji, 418 visits, 网摘, 收藏, 编辑
摘要:一:第一类需求接口和类定义如下: public interface ISample<T> {} public class Sample : ISample<SomeClass2> {} public class SomeClass2{}要求用Unity注入。1:运行时注入如果是运行时注入,可如下编码: using (IUnityContainer container = new UnityContainer()) { ConfigurationManager.Get... 阅读全文

ASP.NET性能优化之分布式Session

2011-11-03 08:56 by Luminji, 3708 visits, 网摘, 收藏, 编辑
摘要:如果我们正在使用Session,那么构建高性能可扩展的ASP.NET网站,就必须解决分布式Session的架构,因为单服务器的SESSION处理能力会很快出现性能瓶颈,这类问题也被称之为Session同步。微软有自己的分布式Session的解决方案,那就是SessionStateServer,我们可以参考:ASP.NET Session State Partitioning http://blog.maartenballiauw.be/post/2008/01/23/ASPNET-Session-State-Partitioning.aspxASP.NET load balancing and 阅读全文

ASP.NET性能优化之局部缓存

2011-10-19 09:27 by Luminji, 2439 visits, 网摘, 收藏, 编辑
摘要:在网站的开发过程中,经常碰到的一类需求场景是:1:页面含热点新闻,热点新闻部分需要10分钟更新一次,而整个页面的其它部分1天内都不会变动;2:首页的某个BANNER需要显式:欢迎***;上面场景中的1,如果整个页面的缓存失效都定为10分钟,则势必增加性能开销,所以最好的策略是页面的不同部分采用不同的缓存失效时长。对于场景2也一样,我们不应该为了迁就某个BANNER不能应用缓存,就让整个页面都不支持缓存。可以说,如果我们在开发网站过程中的缓存策略是不支持页面局部缓存的,整个架构就是不合理的。一:局部缓存常用解决方案针对上面的需求,有几类解决方案:1、Client Side Includes(CS 阅读全文

ASP.NET性能优化之反向代理缓存

2011-10-17 08:50 by Luminji, 2958 visits, 网摘, 收藏, 编辑
摘要:到目前为止,我们讨论了把缓存存放在ASP.NET的输出缓存中(内存和硬盘),以及浏览器缓存中,而大型站点的另一种常用做法是将缓存部署在反向代理服务器上,这类缓存我们通常称之为反向代理缓存,比如Squid和Varnish。这两款软件通常都部署在非WINDOWS平台上,对于Windows平台上的Asp.net来说,其实一样能使用,我们完全可以把反向代理软件部署在LINUX上,然后代理会路由到后台的WINDOWS WEB(IIS)服务器。总之,非WINDOWS的世界很精彩。当然,无论是squid还是varnish都有Windows的扩展版本。本文为了简便起见,基于varnish的Windows版本来 阅读全文

《编写高质量代码:改善C#程序的157个建议》源码下载

2011-09-20 11:13 by Luminji, 2413 visits, 网摘, 收藏, 编辑
摘要:源码:Luminji.Improve20111018.rar====目录前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比Parse好 / 12建议5:使用int?来确保值类型也可以为null / 15建议6:区别readonly和const的使用方法 / 16建议7:将0值作为枚举的默认值 / 19建议8:避免给枚举类型的元素提供显式的值 / 20建议9:习惯重载运算符 / 22建议10:创建对象时需要考虑是否实现比较器 / 23建议11:区别对待==和Equa 阅读全文

《编写高质量代码:改善C#程序的157个建议》勘误表

2011-09-20 11:12 by Luminji, 1209 visits, 网摘, 收藏, 编辑
摘要:《编写高质量代码:改善C#程序的157个建议》中关于勘误的描述:资源及勘误通常情况下,一个问题的解决方案往往不止一种,你可能会不同意本书中的一些观点,甚至会强烈反对。没有关系,你可以通过luminji@hotmail.com(E-mail)与我分享你的宝贵意见,同时也可以在http://www.cnblogs.com/luminji下载书中的源码。我也经常在那里发表博客。当然,你一定也会在书中找到一些错误,我已经在博客上放置了一篇勘误表,我会在第一时间公布这些勘误。以下是勘误部分:1:P178textBoxPage.Text = content;修改为: if (... 阅读全文

ASP.NET性能优化之减少请求

2011-09-14 08:52 by Luminji, 3097 visits, 网摘, 收藏, 编辑
摘要:在上篇《ASP.NET性能优化之让浏览器缓存动态网页》中的方案中,浏览器发送If-Modified-Since将是否需要使用自己的缓存交给WEB服务器去决定,服务器告知浏览器去读缓存,浏览器才会去读缓存。这种机制存在的性能损耗,就是服务器的ASP.NET仍旧要接收请求,处理请求。此篇所讲的机制是让浏览器自己去决定是否去读缓存,这样就彻底消灭了针对服务器的请求。1:减少静态页面请求要让静态页面支持这个需求,我们需要用到http头中的Cache-Control: max-age。值得注意的是Cache-Control是在HTTP/1.1协议下的标识,它是HTTP/1.0协议中的Expires的升级 阅读全文

ASP.NET性能优化之让浏览器缓存动态网页

2011-09-13 09:26 by Luminji, 3579 visits, 网摘, 收藏, 编辑
摘要:上一篇《ASP.NET性能优化之构建自定义文件缓存》我们通过OutputCache,让请求去访问服务器asp.net的输出缓存,我们扩展了OutputCacheProvider,这相当于是访问服务器上的静态资源。OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定的场景下最大化地提升ASP.NET站点的性能。如果说OutputCache是从广度上提升并发效率,则浏览器缓存是从深度上提升效率。一:HTTP头简介1.1浏览器第一次请求假设我们 阅读全文

ASP.NET性能优化之构建自定义文件缓存

2011-09-08 09:21 by Luminji, 4073 visits, 网摘, 收藏, 编辑
摘要:ASP.NET的输出缓存(即静态HTML)在.NET4.0前一直是基于内存的。这意味着如果我们的站点含有大量的缓存,则很容易消耗掉本机内存。现在,借助于.NET4.0中的OutputCacheProvider,我们可以有多种选择创建自己的缓存。如,我们可以把HTML输出缓存存储到memcached分布式集群服务器,或者MongoDB中(一种常用的面向文档数据库,不妨阅读本篇http://msdn.microsoft.com/zh-cn/magazine/gg650661.aspx)。当然,我们也可以把缓存作为文件存储到硬盘上,考虑到可扩展性,这是一种最廉价的做法,本文就是介绍如果构建自定义文件 阅读全文

MVC TIP7:自定义IHttpModule、IRouteHandler实现路由调试

2011-09-07 11:59 by Luminji, 485 visits, 网摘, 收藏, 编辑
摘要:在实际的项目中,会存在大量的自定义路由,URL很容易被错误的路由捕获,现在我们就实现一个这样的诊断工具,该工具通过实现一个自定义的IHttpModule来实现。 首先,我们创建CustomRouteHandler: public class CustomRouteHandler : IRouteHandler { public IHttpHandler GetHtt... 阅读全文

压力测试的轻量级具体做法

2011-09-02 11:26 by Luminji, 1569 visits, 网摘, 收藏, 编辑
摘要:一:压力测试中需要掌握的几个基本概念 1:吞吐率(Requests per second) 服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 记住:吞吐率是基于并发用户数的。这句话代表了两个含义,1:吞吐率和并发用户数相关;2:不同的并发用户数下,吞吐率一般是不同的。 计算公式:... 阅读全文

如何计算下载速度

2011-09-01 14:18 by Luminji, 977 visits, 网摘, 收藏, 编辑
摘要:首先介绍一下几个基本概念。 一:传输速率 电信号或光信号在进入线路后,能快速传播,其速率,即传播速率。单位是m/s,即米/秒。铜线速度是2.3*10^8m/s,光纤是2.0*10^8m/s。 二:带宽 带宽指的是数据发送速度,具体依赖于总线频率和总线宽度。贷款的单位是M,如100M,指的是100Mbit/s,也即100Mbps。 三:大、小B 1字节=1Byte=1B=8bit=8b=... 阅读全文

C#选择排序

2011-08-18 16:40 by Luminji, 369 visits, 网摘, 收藏, 编辑
摘要:1:原理 选择排序是从冒泡排序演化而来的,每一轮比较得出最小的那个值,然后依次和每轮比较的第一个值进行交换。 目的:按从小到大排序。 方法:假设存在数组:72, 54, 59, 30, 31, 78, 2, 77, 82, 72 第一轮依次比较相邻两个元素,将最小的一个元素的索引和值记录下来,然后和第一个元素进行交换。 如上面的数组中,首先比较的是72,54,记录比较小的索引是54的索引1。接着比... 阅读全文
Web Counter
Coupon for Contacts