拒绝访问文件

时间:2013-11-29 14:39:57

标签: c# asp.net

我有一个类似的代码:

string file;

using (StreamReader r = new StreamReader("xml.xml"))
{
    file = r.ReadToEnd();
}

XElement xml = XElement.Parse(file);

using (XmlWriter w = XmlWriter.Create("xml.xml")) //The point of problem!
{
    w.WriteStartDocument();
    ...;
    w.WriteEndDocument();
}

当我尝试像控制台应用程序一样运行时,一切都很好。但是当我想在ASP.NET应用程序中使用它时,问题就出现了。在使用行,它抛出UnauthorizedAccessException异常,并带有“拒绝访问路径”的描述。为什么呢?

2 个答案:

答案 0 :(得分:2)

您需要检查应用程序池用于访问服务器文件/文件夹的帐户,例如,制作一个代码将一个文件复制到应用程序文件夹,检查所有安全信息,复制并粘贴此问题文件夹,通常使用此帐户“IIS_IURRS”完全控制只测试...

答案 1 :(得分:0)

如果正确配置了IIS / Web服务器,则使用权限集非常有限的帐户。当您的路径指向应用程序目录时,很可能不允许应用程序池帐户写入此位置 如果在控制台应用程序中运行代码,则会应用用户的权限,并且很可能允许您写入项目的输出文件夹,因为Visual Studio会将构建输出写入您的帐户下。
我不建议更改应用程序池帐户或文件系统中应用程序文件夹的权限 - 这是一个非常明智的限制,可以限制攻击者可能遇到的麻烦。
因此,我建议将文件移动到帐户可以写入的文件夹而不更改权限,或者在应用程序文件夹层次结构之外定义帐户被授予权限的特殊文件。
另请注意,多个用户可能同时访问该文件,因此数据库可能是存储数据的更好选择。