下载地址1:https://securityswitch.googlecode.com/files/SecuritySwitch%20v4.2.0.0%20-%20Binary.zip

下载地址2:http://url.cn/SOzKPC

安全开关(Security Switch)使各种asp.net网络应用程序可以自动切换页面请求/资源之间的HTTP和HTTPS协议而不需要在HTML中编写绝对url。

通过2.x以上版本的Security Switch(支持asp.net2以及更高版本.net),你可以很容易地在您的网站通过使用SSL证书来实现HTTPS访问。这是通过一个asp.net的模块(IHttpModule)来实现的

特别注意: 

安全开关(Security Switch)这个项目的老版本的名字是SecureWebPageModule库。

配置 

------------- 

配置安全开关是一个简单的过程。打开web.config文件为您的web应用程序,或网站,添加如下的配置(注意···线条所包含的地方就是配置)

<configuration> 

    ... 

    <configSections> 

        ... 

        <sectionname="securitySwitch"type="SecuritySwitch.Configuration.Settings, SecuritySwitch"/> 

    </configSections>

<securitySwitch mode="RemoteOnly"> 

        <paths> 

            <addpath="~/Login.aspx" /> 

        </paths> 

    </securitySwitch>

<system.web> 

        ... 

        <httpModules> 

            ... 

            <!-- forIIS <= 6.x, IIS 7.x + 经典模式, and Web Development Server (Cassini) --> 

            <addname="SecuritySwitch" type="SecuritySwitch.SecuritySwitchModule,SecuritySwitch" /> 

        </httpModules> 

        ... 

    </system.web> 

    ... 

    <system.webServer> 

        ... 

        <validationvalidateIntegratedModeConfiguration="false" /> 

        <modules> 

            ... 

            <!-- 如果是 IIS 7.x +集成模式 --> 

            <addname="SecuritySwitch" type="SecuritySwitch.SecuritySwitchModule,SecuritySwitch" /> 

        </modules> 

        ... 

    </system.webServer> 

    ... 

</configuration>

首先,在configSections元素集合添加一个新的部分定义。这告诉ASP.net,它可以看到一个小节更低的命名,“securitySwitch”。接下来,添加上述的部分。securitySwitch的部分您将实际配置模块。

现在,我们设置模式为“RemoteOnly”和添加一个条目到路径为登录。aspx页面(更多关于这些设置将在下面展示)。最后,添加模块条目到 
system.web/httpModules(IIS < = 6.x,IIS 7.x(启用经典模式 ),其他的Web开发服务器/例如Cassini)或者是
system.webServer/modules(IIS 7.x(启用集成模式),或两者兼而有之。上面的例子片段演示添加了在系统中添加了这两种不同的模块,并且添加了system.webServer/validation元素,以防止IIS从抱怨条目添加到包含/
httpModules。

另一个许多人忘记的重要步骤,是在项目中包含SecuritySwitch的程序集。只需要复制SecuritySwitch的dll文件到你的网站的bin文件夹,或者在你的项目中,添加对SecuritySwitch的dll的引用即可
.

securitySwitch模块的配置是通过web.config。主要的元素本身有多个属性,但没有一个是必需的。以下节点声明是非常有效的,将启用模块并使用默认值。注意,必须要有路径元素和至少一个添加元素条目。

<securitySwitch> 

    <paths> 

        ... 

    </paths> 

</securitySwitch>

securitySwitch的元素可能有以下属性,这些属性可以设置为一个允许的值。定义如下

属性名称

中文翻译

数据类型

默认值

允许的值

baseInsecureUri

基于不安全的URL

string

[null]

任何有效的URI

baseSecureUri

基于安全的URL

string

[null]

任何有效的URI

bypassSecurityWarning

绕开安全警告

bool

false

true, false

ignoreAjaxRequests

忽略Ajax请求

bool

false

true, false

ignoreImages

忽略图片

bool

true

true, false

ignoreStyleSheets

忽略样式表

bool

true

true, false

ignoreSystemHandlers

忽略系统处理器

bool

true

true, false

mode

模式

Mode

On

On, RemoteOnly, LocalOnly, Off

offloadedSecurityHeaders

string

[null]

query string like name/value pairs

offloadedSecurityServerVariables

string

[null]

query string like name/value pairs

securityPort

安全端口

int?

[null]

port indicating secure connection

当你没有一个SSL证书安装在相同的域名作为你的标准站点(通过HTTP访问),或者如果你的服务器设置为HTTPS通过非标准端口(不是443的端口),设置baseSecureUri为一个有效的URI。

设置baseSecureUri将指示模块把那些需要从HTTP切换到HTTPS的需求,重定向到一个以baseSecureUri开始的URL。例如,如果baseSecureUri是“https://secure.mysite.com”,刚好有一个请求是http://www.mysite.com/Login.aspx (
login.aspx已经被配置需要通过https安全访问),该模块将把访问者重定向到https://secure.mysite.com/Login.aspx。类似地,如果baseSecureUri是“https://secure.somehostingsite.com/mysite”,游客将被重定向到https://secure.somehostingsite.com/mysite/Login.aspx。

同样,当你为baseSecureUri提供了一个值,并且baseInsecureUri也设置为一个有效的URI。那么当站点从HTTPS切换到HTTP时,该模块会将访问者带回到你的http标准站点。。基于前面的例子,如果
baseInsecureUri是“http://www.mysite.com”,访问者请求https://secure.somehostingsite.com/mysite/Info/ContactUs.aspx会被重定向到http://www.mysite.com/Info/ContactUs.aspx。

个基本URI来完成切换。

当你想尝试避免浏览器从HTTPS到HTTP切换时提示警告,那么需要将bypassSecurityWarning设置为true。当服务器发出一个重定向请求,许多浏览器提醒游客将从HTTPS删除用户。这对浏览器来说未必是一个糟糕的特性。然而,如果可能的话,一些网站所有者/开发人员希望避免这样的安全警告。当bypassSecurityWarning设置为ture,该模块将放弃"发布一个重定向请求"的这么一个惯例,而是将输出一个“refresh刷新”头,随后是一些JavaScript脚本来改变访问者的位置。一个refresh刷新标题不是一个标准HTTP标头。然而,很多浏览器都尊重它和“刷新”当前位置与指定的URL后一个超时。该模块设置
URL重定向到适当位置,并且超时时间为0(立刻执行)。此外,一个小的JavaScript块输出到浏览器作为备份。如果浏览器不尊敬刷新头,JS脚本将设置window'slocation到适当的URL。

当将ignoreAjaxRequests设置为true时会忽略所有AJAX请求的模块,不管请求的路径。当为true时,如果是通过AJAX来请求,这个设置将会覆盖任何匹配的路径的设置,。如果为false,模块将会像其他任何匹配的路径一样检验并处理请求。

ignoreImages在默认的情况下设置为true,将会指示SecuritySwith添加一些特殊的路径,这些路径将会忽略类似于“图像”文件夹和最常见的web图像文件的请求(请求文件与常见的web映像扩展,例如
.gif  .jpg  .png等

ignoreStyleSheets在默认的情况下设置为true时,此模块添加特殊路径来忽略请求类似于“styles”或“stylesheets”文件夹和文件的.css后缀名的任何请求。

当ignoreSystemHandlers是true时(缺省值),该模块将自动添加一个特殊的路径,确保.axd请求在程序处理期间将被忽略处理。这是一个很大的方便,因为
asp.net 有足够充足的WebResource.axd处理程序可以使用。同样,当这个模块评估需要重定向请求时,Trace.axd和任何其他处理程序的.axd扩展将被忽略。这将避免浏览器提示混合安全警告。比如,当一个页面需要通过HTTPS协议才能访问,但是这个页面的某些资源需要通过不同的协议(比如HTTP)才能访问,那么这个混合安全警告就出现了。如果没有这个设置,当一个通过HTTPS协议的WebResource.axd请求访问的时候,该模块将会发现,没有路径条目能匹配。因此,模块会将请求重定向到使用HTTP,导致混合安全警报。注意,你可以禁用这一设置和手动添加WebResource.axd和任何其他你特别想要忽略的axd模块路径。

mode属性决定了在什么情况下模块评估请求。值为“On”允许所有的请求,而不管他们的起源。“RemoteOnly
"将指示模块只考虑请求是由一个远程计算机发出的。如果一个请求是在实际的Web服务器(即127.0.0.1
localhost,等等),该模块将不会执行。同样,设置模式为”LocalOnly”时表示只有当一个请求是由Web服务器发出时才会执行。最后,“关”完全禁用模块。

使用offloadedSecurityHeaders指定请求头可能会从一个卸载安全设备(比如一个专用的SSL服务器/加速器;如ISA服务器等)出现。表明这是一个安全的连接。这个属性的值应该像一个查询字符串并且没有"?"领导。这个值类似于一个键值对(如SSL
= Yes)。如果有超过一个数据头模块则应该考虑,以一个&字符来界定每一对值(如
SSL = Yes & HTTPS = on & name = joey)

使用offloadedSecurityServerVariables指定服务器变量可能会从一个卸载安全设备(比如一个专用的SSL服务器/加速器;如ISA服务器等)出现,这表明是一个安全的连接。这个属性的值应该像查询字符串并且没有"?"领导,这个值类似于一个键值对对(如HTTP_X_FORWARD_PROTOCOL=HTTPS)。如果有多个服务器变量模块则应该考虑,每一对键值对以一个&字符界定开
(例如 HTTP_X_FORWARD_PROTOCOL=HTTPS&SSL=on)。

使用securityPort来表示一个端口,必须匹配请求的端口为了保证模块是通过一个安全的连接来接收请求。

Paths路径 

~~~~~ 

在安全开关的部分元素里面,有一个paths路径元素。路径元素是一组条目,告诉模块如何处理特定的请求。ASP。NET开发人员应该很熟悉添加路径条目。每个元素的路径集合是一个“添加”元素,以及属性。下面是一个例子,一些路径条目。

<securitySwitch> 

    <paths> 

        <addpath="~/Info/Contact.aspx" matchType="Exact" /> 

        <addpath="~/Login.aspx" /> 

        <add path="~/Manage"/> 

        <addpath="~/Admin(/|/[Dd]efault\.aspx)?$" matchType="Regex"ignoreCase="false" security="Insecure" /> 

        <add path="~/Admin/"/> 

        <add path="~/Media/"security="Ignore" /> 

        <addpath="~/Cms/Default\.aspx\?([a-zA-Z0-9\-%_=]+&amp;)*pageId=2(&amp;[a-zA-Z0-9\-%_= ]+)*$"matchType="Regex" /> 

    </paths> 

</securitySwitch>

第一个条目将确保所有访问Info文件夹下的aspx页面将会通过https访问。matchType的是“Exact”,意味着只有当一个准确的请求这条路径才会匹配。换句话说,如果有任何的尾巴,查询字符串,或书签包括在请求时,它将不会被重定向(例如/Info/Contact.aspx?ref=email,/Info/Contact.aspx#form这样的都不会被https)

接下来的两个(网页~/login.aspx和所有路径包含~/manage开头的,可能是manage文件夹,也有可能是manageNews.aspx这样的网页)将会通过https进行安全请求。因为没有指定matchType,那么默认的值是“StartsWith”。这个可以更好的为这两个进行工作,因为通常登录页面login.aspx的网址后面都会有一个查询字符串(例如你是从一个页面被直接跳转到登陆页
/login.aspx?ReturnUrl=manage.aspx) 。同样,任何在/manage文件夹也是安全的。而且,网页
/ManagementNews.aspx也将是安全的,因为这个网页的请求包含  /manage

第四和第五项都是关于 /Admin目录。第五个条目确保任何请求到 /Admin子目录都是通过https来安全访问的。并且,第四个条目的优先级要高于第五条,因为它是先列出的。它将security(安全)属性设置为insecure(不安全的),那么表示模块通过http这种不安全的方式来访问
/Admin目录默认的页面。它的matchType设置为“Regex”,也就是用正则表达式来匹配出一个默认的页面(例如
/Admin  或者是 /Admin/ 或者是/Admin/default.aspx)。同时,ignoreCase(忽略大小写)属性被设为false(也就是不忽略大小写,也就是大小写代表不同含义)来证明一个观点; /Admin/Default.aspx 和
/Admin/default.aspx 是两个不同的请求(两个default的d字母大小写不一样)。因为我们在正则里面写了[De],所以正则都会给我们进行匹配(也就是Default或者是default都可以,因为我们写了
[De])。如果我们省略 ignoreCase属性,或者将它设置为true(缺省值),正则表达式就可以简单的重写成 
“~/Admin(/|/Default\.aspx)?$”,这个时候就不用管default是大小写了,此时都会被匹配。

第六个条目将迫使模块忽略任何对Media文件夹的访问。这一点很重要,如果你运行的是一个网站在IIS
7.x的集成模式或者如果你有一个通配符处理程序设置IIS处理所有请求都通过ASP.net的管道。那么在这些情况下,使用
/Media/Images/Title.jpg的页面将使用相同的协议。如果排除一个页面通过HTTPS引用图像,图像请求将被重定向到HTTP的模块;导致混合安全警告在浏览器。

最后的条目,当请求/Cms/Default.aspx页面时,使用正则表达式来匹配特定的查询字符串值。如果一个不安全的请求(即http协议)来访问
/Cms/default.aspx?pageId = 2,它将被重定向到Https以确保它是安全的访问。该条目甚至可以,只要当查询字符串中任何包含pageId = 2这个参数,他就会匹配去用Https。它可以是第一个参数,唯一的参数,或第三个参数(例如
/Cms/default.aspx?cache=On&pageId = 2&author =joey)。

最后,如果没有路径条目匹配一个请求时,该模块将确保它不安全地访问(也就是说,如果没有匹配到Https,那么就通过HTTP来访问)。这可以防止“陷在HTTPS”。即,访问该网站通过HTTPS和继续通过HTTPS请求的资源。这样的行为将导致更多的CPU使用率在服务器(SSL需要更多一点的处理加密)和更多的带宽消耗(加密的数据本身是大于原始数据)。要么最终可能会花费你或你的客户可能更大一点的托管账单!

注意你的路径排序,顺序是很重要。在上面的示例中,条目四,五是下令专门来获得期望的结果。如果第四个条目(将security(安全)属性设置为了“不安全”)的顺序在第五个条目的下面,那么第四个模块永远不会运行。该模块过程中的条目的顺序规定他们,从上到下,一旦发现一个匹配的条目,就作用于它。事实上,将security属性设置为“不安全”唯一的原因是需要覆盖更一般的下面的条目。在上面的例子中,任何在
/Admin目录下的文件都会通过Https来安全访问,如果没有第四个条目覆盖默认页面的这种行为的话。(第四个条目设置 /Admin文件夹下的default.aspx可以通过http这种不安全的协议来访问)

智能感知和安全开关( securitySwitch)节点模式

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

当在web.config文件编辑securitySwitch节点的时候如果需要启用智能感知,那么我们在解决方案里面添加一个xmlns属性小节,包括提供的模式文件。下面是一个示例的部分与必要的属性。 

<securitySwitch xmlns="http://SecuritySwitch-v4.xsd" ...> 

    <paths> 

        ... 

    </paths> 

</securitySwitch>

一定要在您的解决方案包括SecuritySwitch-v4.xsd文件(就是在项目上,右键,添加现有项,选择SecuritySwitch-v4.xsd文件即可),或给VS来安装模式文件。如果Visual
Studio在您的解决方案里并不自动检测模式文件,你可以将它添加到模式属性在Properties窗口,而
web.config文件是开放的。安装模式文件,Visual Studi会用到所有项目中,复制
xsd文件到适当的目录中,如下所示([版本)表明你安装到的Visual
Studio版本)。 

* 32位操作系统:%ProgramFiles%\Microsoft Visual Studio [version]\Xml\Schemas 

* 64位操作系统:%ProgramFiles(x86)%\Microsoft Visual Studio [version]\Xml\Schemas

请求的动态评估 

------------------------------ 

可能有时您不能配置需要Https保护的路径,因为您的应用程序生成的url /路径动态。特别是内容管理系统(CMS)。在这些情况下,你可以从配置部分省略paths元素,并提供一个事件处理程序模块的
EvaluateRequest事件.为此,在你的网站添加一个Global.asax文件命名的全局事件处理程序,
“SecuritySwitch_EvaluateRequest”以及以下签名

protected voidSecuritySwitch_EvaluateRequest(object sender, EvaluateRequestEventArgs e)



  // TODO: 基于当前的请求更新 e.ExpectedSecurity  

}

设置事件参数的ExpectedSecurity的安全值, 那么模块的请求将优先使用它,而不是试图通过路径的配置而找出如何请求。

额外的资源 

-------------------- 

* 原文的代码项目 

http://www.codeproject.com/KB/web=security/WebPageSecurity_v2.aspx

*
维基百科上的传输层安全协议(TLS)和安全套接字层(SSL) 

http://en.wikipedia.org/wiki/Transport_Layer_Security

*
提示/技巧:启用SSL在IIS
7.0使用自签名证书(感觉有点像是自己做个证书,自己玩) 

http://weblogs.asp.net/scottgu/archive/2007/04/06/tip-trick-enabling-ssl-on-iis7-using-self-signed-certificates.aspx

*
如何在IIS 7设置SSL 

http://learn.iis.net/page.aspx/144/how-to-set-up-ssl-on-iis-7/

小提示:<securitySwitch mode="On">  mode属性决定了在什么情况下使用模块评估请求。

种选择情况,分别是  
On(默认),RemoteOnly,LocalOnly,Off

On 
使模块的所有请求,不管他们的起源,来自各个方向的请求都使用SSL。

RemoteOnly将指示模块只考虑请求是由一个远程计算机。如果一个请求是在实际的Web服务器(即127.0.0.1
localhost,等等),该模块将不会行动。

LocalOnly表示模块在本地调试时使用。

Off  
完全禁用模块。表示SSL不可用。

小提示:axd一般是ASP.NET网站程序里的一个HttpHandler

其实扩展名为ashx与为axd基本上是一样的,都是用于写web
handler,可以通过它来调用IHttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。

唯一不同的地方是:axd扩展名的必须要在web.config中的<httpHandlers>中进行注册,而ashx直接在项目中当成aspx那样添加使用即可。

trace.axd  是微软的一个项目。配置 ASP.NET代码,跟踪服务以控制如何收集、存储和显示跟踪结果。一些嵌入式资源默认就是用WebResource.axd获取

Http,Https (SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2 中文帮助文档 分类: ASP.NET 2014-10-28 14:09 177人阅读 评论(1) 收藏的更多相关文章

  1. Http,Https (SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2 英文帮助文档 分类: ASP.NET 2014-10-28 10:50 147人阅读 评论(1) 收藏

    Security Switch 4.2 =================== Security Switch enables various ASP.NET applications to auto ...

  2. 获取文件路径 分类: WinForm 2014-07-25 14:27 103人阅读 评论(0) 收藏

    //可获得当前执行的exe的文件名. string str1 =Process.GetCurrentProcess().MainModule.FileName; //获取和设置当前目录(即该进程从中启 ...

  3. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  4. IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法 分类: 数据安全 2014-06-28 11:35 2805人阅读 评论(0) 收藏

    问题描述: 原因分析: 服务器开启了Https时,cookie的Secure属性应设为true:   解决办法: 1.服务器配置Https SSL方式,参考:https://support.micro ...

  5. 利用Python分析GP服务运行结果的输出路径 & 实现服务输出路径的本地化 分类: Python ArcGIS for desktop ArcGIS for server 2015-08-06 19:49 3人阅读 评论(0) 收藏

    最近,一直纠结一个问题:做好的GP模型或者脚本在本地运行,一切正常:发布为GP服务以后时而可以运行成功,而更多的是运行失败,甚至不能知晓运行成功后的结果输出在哪里. 铺天盖地的文档告诉我,如下信息: ...

  6. 相对路径 分类: C# 2015-06-11 15:41 8人阅读 评论(0) 收藏

    .绝对路径     绝对路径是指文件在硬盘上真正存在的路径.例如"bg.jpg"这个图片是存放在硬盘的"E:\book\网页布局代码\第2章"目录下,那么 &q ...

  7. Http,Https(SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2的配置和使用 分类: ASP.NET 2014-11-05 12:51 97人阅读 评论(0) 收藏

    下载地址1:https://securityswitch.googlecode.com/files/SecuritySwitch%20v4.2.0.0%20-%20Binary.zip 下载地址2:h ...

  8. ASP.NET 自定义URL重写 分类: ASP.NET 2014-10-31 16:05 175人阅读 评论(0) 收藏

    一.功能说明: 可以解决类似 http://****/news 情形,Url路径支持正则匹配. 二.操作步骤: 1.增加URL重写模块: using System; using System.IO; ...

  9. ASP.NET 自定义URL重写 分类: ASP.NET 2014-10-31 16:05 174人阅读 评论(0) 收藏

    一.功能说明: 可以解决类似 http://****/news 情形,Url路径支持正则匹配. 二.操作步骤: 1.增加URL重写模块: using System; using System.IO; ...

随机推荐

  1. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

  2. 【HDOJ】3221 Brute-force Algorithm

    归来吧很好推导.T(n) = a^f(n-1)*b^f(n)%p.主要难点在于求mod和fibo.引用如下公式A^B%C = A^(B%phi(C) + phi(C))%C, 满足B>=phi( ...

  3. 《Apache Spark源码剖析》

    Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...

  4. bzoj1257

    这道题初看确实没什么思路,感觉之前的数论知识都用不上,只好自己找规律首先当n>=k 这部分是很容易直接算出的下面我们先来尝试这穷举i,不难发现当穷举i时,总存在一段连续的除数,k div i=p ...

  5. 什么是系统,什么是算法 -- lemon OA 系统学习总结

    一.对于模块划分的理解 对于一个大型(这里还只是一个中型系统)系统来说,代码的编写不是一日而就的,层次的明细也不是一眼就能看清楚的. 在这种情况下,需要想好,最好是由上而下地想好. 能够模块式地划分最 ...

  6. Selenium API(C#)

    1 Fetching a Page driver.Url = "http://www.google.com"; 2 Locating UI Elements (WebElement ...

  7. Android学习笔记(七)两个Fragment简单跳转示例

    在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在AP ...

  8. mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法

    今天上QQ跟阳小进讨论的时候突然聊到了输入法,然后阳小进就发了这样一段文字过来: 修改中西文切换键由Shift到Ctrl 关于为什么要改为Ctrl键,贴吧里有个讨论 在贴吧说服佛振的网友: 「因为 S ...

  9. 龙芯8089_D安装debian 8 iessie

    参考官方文档:https://wiki.debian.org/DebianYeeloong/HowTo/Install 下载网络引导文件后使用tftpd建立ftfp服务器,然后使用PMON tftp来 ...

  10. 趣味理解ADO.NET对象模型

    为了更好地理解ADO.NET的架构模型的各个组成部分,我们可以对ADO.NET中的相关对象进行图示理解,如图所示的是ADO.NET中数据库对象的关系图. 讲究完关系图后,为了加深大家的理解,我们可以用 ...