1

我们最近将暂存服务器迁移到新的托管服务提供商,并在托管帐户控制面板中设置表单身份验证,以便爬虫和不受欢迎的访问者无法访问它。

现在,我们发现站点逻辑的至少一个区域由于 HTTP 401 Unauthorized 而失败。

该站点的一部分为站点用户生成 PDF。转换是从 HTML 到 PDF。源页面是用 C# 编写的 .ASPX。通过使用 URL 下载 ASPX 文件来生成 .HTM,例如http://www.mysite.com/mypage.aspx

现在该站点受密码保护,这些例程因 HTTP 401 而失败,我不知道如何克服这个问题。我们不想删除站点身份验证,因为我们不希望任何东西访问它。

谁能告诉我如何围绕这个进行编码,以便我们的内部例程可以访问我们需要的本地页面?

编辑

一些更详细的。由于这只是一个开发站点,我从托管服务提供商的控制面板中执行了一个快速而肮脏的配置,以启用文件夹安全性。我添加了根文件夹“/”,然后创建了 2 个用户。这工作正常。当我访问该站点时,系统会提示我显示一个表单身份验证对话框。我输入我的用户名和密码,访问被授予。

我注意到此配置在我的根 /' 网站文件夹中创建了 4 个文件。它们是 .htaccess、.htpasswd、.htgroup 和 .htfolders。这个网站有很多文件夹。以这种方式配置每一个都是耗时且乏味的。因此'/'根配置。

我们的目的是阻止对爬虫/搜索引擎以及偶然发现主机名的临时访问者的访问。

此配置会产生副作用,即站点的一小部分无法再通过 http:// 访问它自己的页面,而不会出现 HTTP 401 错误。我想做的是使用<security><ipSecurity>除我自己和网站之外的所有这些配置黑名单,但提供商没有安装所需的 IP 模块来执行此操作。

接收 HTTP 401 的 C# 代码是:

webrequest = (HttpWebRequest)WebRequest.Create(url);
webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)";
webrequest.Timeout = 600000;
resp = webrequest.GetResponse();

我也试过:

CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(url), "Basic", new NetworkCredential("username", "password"));
webrequest = (HttpWebRequest)WebRequest.Create(url);
webrequest.Credentials = credCache;
webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)";
webrequest.Timeout = 600000;
resp = webrequest.GetResponse();

两种方法都收到 HTTP 401 Unauthorized。我真的不想在 C# 代码中解决这个问题,因为这个安全问题不会在实时站点上存在。如果需要,我宁愿在 web.config 和/或 .ht* 文件中执行此配置。

所以,我想知道,我可以在 web.config 中放置什么有用的东西吗?有没有人看到这个设置方式有问题?(除了它不工作!:P)

4

1 回答 1

1

如果您愿意,您可以只删除一页的身份验证,如下所示。

<location path="mypage.aspx">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
于 2013-08-20T20:14:15.363 回答