Asp.net mvc ASP.NET MVC:Serve.cshtml文件;原样;
假设ASP.NET MVC web应用程序允许用户浏览服务器上某些VCS存储库的内容。现在,除其他外,这个存储库包含Asp.net mvc ASP.NET MVC:Serve.cshtml文件;原样;,asp.net-mvc,razor,Asp.net Mvc,Razor,假设ASP.NET MVC web应用程序允许用户浏览服务器上某些VCS存储库的内容。现在,除其他外,这个存储库包含*.cshtml文件,我想按原样呈现这些文件 <security> <requestFiltering> <fileExtensions> <remove fileExtension=".cshtml" /> <remove fileExtension=".vbhtml"
*.cshtml
文件,我想按原样呈现这些文件
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
换句话说,当用户导航到时,就会显示main.cs
文件的“原始”内容,这已经可以正常工作了。但是,访问会在ASP.NET运行时的深处导致HttpException
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
我尝试从/browse
中删除BlockViewHandler
,并在
中显式允许*.cshtml
文件,但无效:
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
尝试直接从文件系统本身读取它,以便它绕过razor。比如:
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
string filePath = Server.MapPath("~/directory/subdirectory/main.cshtml");
string rawTemplate = System.IO.File.ReadAllText(filePath);
然后将其填充到ViewModel或直接写入响应?您可能需要Html.Raw()来显示它,因此如果用户可以编辑它,您可能需要从XSS内容中清理模板。这些.cshtml文件无论如何都不在磁盘上--它们在VCS存储库中,我可以通过编程从中查找它们。这里的罪魁祸首是以“.cshtml”结尾的URL,ASP.NET似乎被它卡住了。
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<remove fileExtension=".vbhtml" />
<add fileExtension=".cshtml" allowed="true" />
<add fileExtension=".vbhtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>