`

给WSS3.0增加用户与IP绑定功能

阅读更多
公司用WSS3.0做内部协同,但是由于很多分公司在外地,所以协同网站必须在公网上,为了提高安全性和更好的分区域管理,所以要给WSS增加一个用户于IP绑定的功能,这个任务光荣地落到我的头上,结果查遍Google,Baidu无果,只好自力更生。想到的第一个方法是做一个WebPart,在WebPart检测登录的用户名,然后与数据库里的绑定表作对比。不过转念一想WebPart需要部署且要加了的页面才能起作用,整个网站集几十个站点,累也能累死。最后决定自己写一个HttpModule加上去,然后在AuthorizeRequest 事件里来验证。至于验证的过程到是很简单,只需要在数据库里比对一下就行了。
由于采用的Form认证,所以在aspnetdb数据库里增加一个绑定表,就两个列,UserAccount和IpAddr,因为不存在范围之类的所以直接用字符串的形式存储IP。
HttpModule很好写,为了避免每次都读取数据库,在第一次验证成功就生成Cookie,之后检测到Cookie就不再验证了。之前想过用Cache,不过Cache和Application一个级别的,用Session又太麻烦,于是用Cookie,最后代码如下:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> 1     public class UserProvider:IHttpModule
 2     {
 3 
 4         private HttpApplication ctx;
 5         private String User;
 6         #region IHttpModule 成员
 7 
 8         public void Dispose()
 9         {
10             ctx = null;
11             //throw new Exception("The method or operation is not implemented.");
12         }
13 
14         public void Init(HttpApplication context)
15         {
16             ctx = context;
17             context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
18 
19         }
20 
21         void context_AuthorizeRequest(object sender, EventArgs e)
22         {
23             try
24             {
25                  User = ctx.User.Identity.Name.ToLower();
26                  if (User != null && User.Length > 1)
27                  {
28                      if (ctx.Context.Request.Cookies["AuthIP"]== null)
29                      {
30                          SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
31                          string IP = "0.0.0.0";
32                          string UIP = "";
33                          using (conn)
34                          {
35                              conn.Open();
36                              SqlCommand cmd = new SqlCommand("SELECT [UserAccount],[IPAddr] FROM [aspnetdb].[dbo].[IPLock] WHERE [UserAccount] = @P", conn);
37                              cmd.Parameters.Add("@P", SqlDbType.VarChar, 50).Value = User;
38                              SqlDataReader sd = cmd.ExecuteReader();
39                              if (sd.Read())
40                              {
41                                  IP = sd["IpAddr"].ToString();
42                              }
43                              conn.Close();
44 
45                              UIP = ctx.Request.UserHostAddress;
46                              if (!IP.Equals("0.0.0.0"))
47                              {
48                                  if (!IP.Equals(UIP))
49                                  {
50                                      throw new Exception("IP地址被禁止" + User + ":" + IP);
51                                  }
52                              }
53                              ctx.Response.Cookies.Add(new HttpCookie("AuthIP"));
54                              ctx.Response.Cookies["AuthIP"].Value = "OK";
55                              ctx.Response.Cookies["AuthIP"].Expires = DateTime.Now.AddDays(1);
56                          }
57                      }
58                  }
59             }
60             catch (Exception ex)
61             {
62                 throw ex;
63             }
64             
65         }
66 
67         #endregion
68     }

不过在Web.Config里加载上这个模块后直接报错了。显示 SqlClientPermission 的权限有问题,看来在这里访问数据库还是有问题,WSS应该对代码的安全性做了限制,查了查Web.Config.看到:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1     <securityPolicy>
2       <trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
3       <trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
4       <trustLevel name="WSS_Custom" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_custom_wss_minimaltrust.config" />
5     </securityPolicy>

看来是在这里设置的了。找到<trust level="WSS_Custom" originUrl="" /> 发现当前WSS使用的WSS_Custom这个配置,于是就到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\ 找到Wss_Custom_wss_minimaltrust.config文件

看了下发现里面确实没有关于Sqlclient的配置,本来想就地添加,不过转念一想自己动手怕将来要修改的地方太多太杂,于是继续看了下另外两个config文件,最后在wss_mediumtrust.config 里找到了SqlClint相关的配置,于是最后将trust节点改成<trust level="WSS_Medium" originUrl="" />

打开页面看看,OK,搞定收工。

[本代码乃Demo,与公司内部使用的代码与逻辑均不相同,特此声明]

分享到:
评论

相关推荐

    官方发布的40个基于WSS3.0的网站模板

    官方发布的40个基于WSS3.0的网站模板为用户提供了强大的工具,使得在WSS3.0平台上构建功能丰富的网站变得更加简单和高效。无论是小型团队还是大型企业,都可以根据自身的需求选择合适的模板,快速建立起满足业务需求...

    WSS3.0 SDK 中文手册

    WSS3.0 SDK 中文手册 WSS3.0 SDK 中文手册 WSS3.0 SDK 中文手册

    基本WSS3.0的人事管理系统(DEMO)

    描述中提到的"基本WSS3.0的人事管理系统(DEMO)",意味着这是一个用以演示如何在WSS 3.0平台上开发人事管理功能的实例。DEMO通常包含基本功能,如员工信息管理、考勤记录、职位发布、薪酬福利等,但可能不包含所有...

    wss 3.0 登录方式修改

    Windows SharePoint Services(WSS)3.0是微软提供的一款基于Web的协作平台,它允许用户创建、共享和管理文档、数据以及网站内容。在WSS 3.0中,系统默认的登录方式通常依赖于Active Directory(AD)进行身份验证。...

    一个基于Microsoft Windows SharePoint Services (WSS) 3.0的Calendar程序源码例子

    在IT领域,Windows SharePoint Services(WSS)3.0是一个重要的协作平台,它为企业提供了构建网站、管理文档和促进团队合作的功能。在这个特定的例子中,我们关注的是一个基于WSS 3.0的Calendar程序源码,这为开发...

    Wrox.Expert.WSS 3.0.and.MOSS.2007.Programming

    Microsoft Windows SharePoint Services (WSS) 3.0 and Microsoft Office SharePoint Server (MOSS) 2007 provide developers with a rich development framework for implementing features and functionalities ...

    Wrox.Expert.WSS 3.0.and.MOSS.2007.Programming -2

    Microsoft Windows SharePoint Services (WSS) 3.0 and Microsoft Office SharePoint Server (MOSS) 2007 provide developers with a rich development framework for implementing features and functionalities ...

    在SQL Server中管理WSS 3.0的内容数据库 使用T—SQL查询来收集关于SharePoint环境的有用信息.pdf

    在讨论如何在SQL Server中管理Windows SharePoint Services 3.0(WSS 3.0)的内容数据库时,首先需要明确内容数据库的定义及其重要性。WSS 3.0的内容数据库存储了所有SharePoint站点的数据和配置信息,是SharePoint...

    Windows SharePoint Services平台管控信息体

    例如,个人用户、团队项目、部门资源和企业级应用都可以在WSS3.0的框架下统一管理,形成一个连贯的信息生态系统。 ### 三、配置WSS3.0以优化支持使用环境 配置WSS3.0以最佳支持各种使用环境,需要深入分析企业当前...

    使用微软NLB(网络负载均衡)技术组建Wss站点.doc

    通过使用有助于用户跨组织和跨地区边界保持连接的协作工具,WSS 使用户能够访问他们所需的信息。建立在 Microsoft Windows Server 2003 之上的 WSS 还提供了一个基础平台,用于构建基于 Web 的业务应用程序,可以...

    inside wss 3.0

    了解和开发sharepoint的入门基础书籍

    Python库 | tencentcloud-sdk-python-wss-3.0.335.tar.gz

    《Python库 Tencentcloud-sdk-python-wss 3.0.335详解》 在Python的开发环境中,丰富的库是其强大功能的重要支撑。Tencentcloud-sdk-python-wss是腾讯云为Python开发者提供的一款用于处理WebSocket服务的SDK,版本...

    windows sharepoint services 3.0

    **Windows SharePoint Services 3.0 (WSS 3.0)** 是微软为组织提供的一种协作平台,旨在帮助用户更高效地共享文档、管理项目以及交流信息。它作为Microsoft Office SharePoint Server 2007的基础版本,提供了许多...

    实验2-1配置与管理信息共享服务(WSS).doc

    在Windows Server 2008中,WSS功能已内置,用户可以直接配置。安装前的准备工作包括: 1. 将服务器加入域或提升为域控制器。 2. 安装IIS,包括ASP和ASP.NET组件。 3. 安装.NET Framework 3.0和SMTP服务器。 **WSS...

    使用微软NLB网络负载均衡技术组建Wss站点.doc

    - Wss1:IP地址192.168.10.11,机器名wss1,安装了IIS6、.NET 3.0和WSS3.0 - Wss2:IP地址192.168.10.12,机器名wss2,配置同Wss1 - NLB后的Wss Web配置:IP地址192.168.10.13,域名wss.Projectaims.com - AD...

    Inside Microsoft Windows SharePoint Services 3.0

    在3.0版本中,它为用户提供了一系列增强的功能和改进,以提升工作效率和团队合作。 WSS的核心功能包括: 1. **网站创建与管理**:用户可以轻松创建自定义的网站模板,满足不同部门或项目的需求。这些网站支持多种...

    Python库 | tencentcloud-sdk-python-wss-3.0.422.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-wss-3.0.422.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics