我有一个asp.net应用程序(IIS7),我希望使用外部服务器IP阻止访问它。我只想允许使用我的域名进行访问。
例如,我的域名是domain.com和IP 161.0.0.1,我想阻止访问http://161.0.0.1/webapp/
我更喜欢使用web.config
提前,
答案 0 :(得分:3)
在IIS中,您可以准确配置您希望站点响应的IP / DNS名称组合。您可以轻松强制它仅响应特定的IP。
对于IIS 7:
现在,您的网站只会响应该特定域名,并且不会仅通过IP地址进行响应。
如果您的网站使用SSL证书,请参阅以下问题,该问题讨论如何配置IIS以强制使用主机名:
https://serverfault.com/questions/96810/iis7-cant-set-host-name-on-site-with-ssl-cert-and-port-443
链接到:
http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html
这个链接更适合通过用户界面完成:http://blog.armgasys.com/?p=80
答案 1 :(得分:2)
好的,如果您希望通过DNS名称而不是通过IP访问站点,区分它的唯一方法是检查标题中请求的主机名。我知道有两种方法可以做到:
1)在IIS管理器中配置“绑定”对话框。这是最容易设置但不适用于HTTPS。只需将www.domain.com放入主机名字段,就会拒绝对IP的请求。对于HTTPS,如果您的安全证书是针对特定主机名的,则用户在尝试通过IP连接时会收到安全警告,但通常他们可以覆盖警告(取决于浏览器设置)。
编辑:Chris Lively已经将这种方法与HTTPS绑定联系起来了,请参阅他的答案以获取更多信息。
2)或者,您可以检查代码中的标头。以下是IHttpModule
的示例,它可以实现您想要的效果。它也是在web.config中配置的插件解决方案。
代码:
Public Class HostNameCheck
Implements IHttpModule
Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
End Sub
Public Sub Init(context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.BeginRequest, AddressOf context_BeginRequest
End Sub
Private Sub context_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim objApp As HttpApplication = DirectCast(sender, HttpApplication)
If objApp.Request.Url.Host <> ConfigurationManager.AppSettings("AcceptedHostName") Then
objApp.Response.Clear()
objApp.Response.StatusCode = 403
objApp.Response.SubStatusCode = 6
objApp.Response.Flush()
End If
End Sub
End Class
的Web.config:
<configuration>
<appSettings>
<add key="AcceptedHostName" value="www.domain.com"/>
</appSettings>
<system.webServer>
<modules>
<add name="HostNameCheck" type="HostNameCheck"/>
</modules>
</system.webServer>
</configuration>