我是在学校做VOD视频点播的,在局域网中注册IP可以访问,现在要禁止这个未注册的IP访问Web,不是进入Web以后再判断IP!
解决方案 »
- ASP.net DataList控件不显示编辑项
- 如何把一段有规律的字符串拆分成一个DataTable?
- FindControl() 方法只是在模板中找控件才用吗?还用在其他什么地方?
- datagrid控件中显示html格式的问题!附代码
- 数学问题。分数如何转化成 百分比?
- datareader简单问题
- jquery ajax 请求回来的数据页面刷新后不显示了
- 有用过动网新闻的兄弟没有? 为什么我这里的会员添加不了新闻呢?就是那个下拉框中(选择添加新闻的种类)没有内容,怎么办啊?
- 入门问题,请帮助
- 奔四,512M内存,40G硬盘,XP操作系统,为什么装不了oracle
- javascript动态创建的控件在.net后台文件中如何访问
- 在线等,解决了立即结帖,机器报错“服务器应用程序不可用”
这个问题可以进一步划分为两个问题:
1、如何控制iis的IPDeny;
2、由于是WEB方式,默认的WEB帐户权限很低,不会有上面操作的权限,如何处理。
第一个问题:微软的msdn中给出了三种方法:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/setting_ip_security_using_system_directoryservices.asp
这里给出了两种。其实都是使用 System.DirectoryServices 类
后一种竟然有这样的要求:
This example requires Windows Server 2003 Service Pack 1, which contains fixes that allow System.DirectoryServices to enumerate list properties.
晕倒,当时就是没看到这条,这一种调试了很久才发现有这个限制。
Windows Server 2003 Service Pack 1 那要啥时候才能出来呀。等不及了。放弃这种方案。另外一个在:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/ref_prog_iaorefiipsecd.asp
代码是 VBScript 写的
其实有个更好的在:
http://www.thecodeproject.com/csharp/IISWMI.asp
这里其实是使用 System.DirectoryServices。同时通过使用 反射 来避免上面必须 win2003 sp1 才可以使用的尴尬。
具体代码请看那个网页,我就不详细说了。我就是采用的这个。
第二个问题:当然,你可以给 WEB 的运行帐户非常高的权限来解决这个问题。
我们这里要说的不是这种不安全的,而是只给必要的权限。这就需要 身份模拟(Impersonation)了。有关在ASP.NET应用程序中使用身份模拟的文章请看以下文章:
http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/impersonation.mspx或者你查 msdn 中 WindowsImpersonationContext 类的说明。
或是是 web.config 中 <identity impersonate="true" /> 这样一节的相关信息至于如何新设一个帐户,这个帐户只有对iis的IPDeny有读写权限。
汗颜,我也不会。我是用了一个更高权限的帐户。通过设置 Web.config 的 identity 节来实现的。
通过设置: impersonate="true"
这样,用户身份的认证交给IIS来进行。
当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。
当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。
这时候我使用不允许匿名登录,然后使用一个非常高权限的帐户登录,就可以操作了。这方面的文章还可以参考:
http://www.microsoft.com/china/technet/security/guidance/secmod38.mspx
如果你是linux、unix系统的apache,那么可以用防火墙来设置,比如ipfw