是否可以实用地判断ASP.NET Web应用程序是在Visual Studio或IIS中的Cassini Web服务器中运行?
提问的背景和原因:
在我们的很多应用中,我们通过检查计算机名称或检查客户端IP是否为localhost来绕过登录页面中的正常登录设置。 (127.0.0.1或::: 1)这样我们就可以在我们的开发PC上进行调试时测试并使应用程序的行为不同。
机器名称方法没问题,但是当我们得到一台新的Dev PC时,我们需要更改代码。我意识到这不是经常发生,但感觉很草率。此外,由于有几个开发人员正在处理它,我们必须在“if”语句中列出我们所有的机器。
对于“localhost”方法,我不喜欢它。它似乎增加了另一个攻击面。我担心有人会进入其中一个网络服务器并在本地运行并查看内容。
所以我想知道是否有一种方法可以从代码中检测到网站是从带有Cassini Web服务器的Visual Studio运行的。
答案 0 :(得分:2)
在IIS下运行时,SERVER_SOFTWARE
集合的ServerVariables
属性会报告类似Microsoft-IIS/7.5
的内容。
不幸的是,在Cassini下运行时,这似乎是空白的。
我不知道这是否对您有所帮助,因为如果您担心安全问题,这似乎与所期望的行为相反。
来自评论:
检查System.Diagnostics.Process.GetCurrentProcess()。ProcessName对于Cassini,它是“WebDev.WebServer40”,对于IIS,它是“w3wp”
string processName= System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if (processName == "WebDev.WebServer40")
{
// testing
// Insert code that you want to happen if this is running in Visual Studio
}
如果这在IIS中运行,则pName变量将为“w3wp”。在.NET 4.0应用程序的Visual Studio中,它是“WebDev.WebServer40”。 (我没有检查,但我认为它将是WebDev.WebServer20 for ASP.NET 2.0)
答案 1 :(得分:0)
你不能使用构建符号吗?设置构建符号然后执行#IF PROD然后运行身份验证。因此,当您处于调试模式时,它将完全跳过身份验证。希望有所帮助!