默认情况下,应用程序池是否对 Azure 网站中的整个 Web 目录具有写入权限?

Does app pool have write permission on entire web directory by default in Azure Websites?

我正在处理一个全新的 Azure 网站,我对默认 ACL 感到非常困惑。应用程序池似乎默认具有写入权限。我做了一个简单的页面来测试这个:

<%@ Page Language="C#" %>
<html>
<head></head>
<body>
<h1>Testing Write Permissions</h1>
<p>In a typical IIS setup this throws <em>System.UnauthorizedAccessException</em>,
but it works in my new Azure Website. Does it work for you?</p>
<%
try {
    string path = HttpContext.Current.Server.MapPath("test.html");
    System.IO.StreamWriter file = new System.IO.StreamWriter(path, true);
    file.WriteLine("\n<p>" + System.DateTime.UtcNow + "</p>");
    file.Close();
    Response.Write("<p>I just wrote to <a href=\"test.html\">test.html</a>!</p>");
} catch (System.Exception ex) {
    Response.Write("<p>" + ex.ToString() + "</p>");
}
%>
</body>
</html>

在我的 IIS 上按预期抛出错误,但是当我使用 FTP 将其作为 caniwrite.aspx 推送到我干净利落的新 Azure 网站时,它运行并 test.html 显示编辑。其他人是否看到这种行为?这是一个普遍的错误吗?我是否忽略了配置设置?你能解释一下这种行为吗?

(我认为锁定您的应用程序池的访问权限仍然是最佳做法,这样它就可以读取网站的大部分内容,但只能在少数地方写入,例如 app_data。)

您所展示的内容与授予匿名用户对您网站的写入权限截然不同。您的站点在它自己的 IIS 环境下运行,可以为所欲为。如果匿名用户可以访问给定的 URL(他们在这里这样做),那么 URL 触发的任何代码都将被执行。

您在这里寻找的似乎是为了防止匿名用户访问您网站上的特定网址。为此,您需要查看如何向您的站点添加身份验证和授权