首页 > 解决方案 > 如何阻止某些 HTTP 方法访问特定 URL?

问题描述

出于安全原因,我想通过应用程序级别为 URL 禁用一些 http 方法(例如 OPTIONS、TRACE、HEAD)。

URL 是“mywebsite.com/bundles/”

我试过这个

<system.web>
<authorization>
    <deny verbs="OPTIONS" users="*" />
    <deny verbs="TRACE" users="*" />
    <deny verbs="HEAD" users="*" />
</authorization>

...

<httpHandlers>
    <add path="bundles" verb="OPTIONS" type="System.Web.DefaultHttpHandler" validate="true"/>
    <add path="bundles" verb="TRACE" type="System.Web.DefaultHttpHandler" validate="true"/>
    <add path="bundles" verb="HEAD" type="System.Web.DefaultHttpHandler" validate="true"/>
</httpHandlers>

它会阻止所有应用程序的 http 方法,但我只想要“/bundles”及其文件和子目录。

但是“捆绑”不是我的应用程序中的物理路径,而是虚拟的

bundles.Add(new Bundle("~/bundles/Something").Include("~/Contents/Scripts/file.js"));
bundles.Add(new Bundle("~/bundles/Anything").Include("~/Areas/Import/Scripts/App/anotherfile.js"));

标签: asp.netasp.net-mvchttpweb-configbundle

解决方案


您应该能够使用<location>元素将任何封闭的指令限制为您指定的路径。例如

   <location path="bundles">
      <system.web>
         <authorization>
            <deny verbs="OPTIONS" users="*" />
         </authorization>
      </system.web>
   </location>

请参阅https://msdn.microsoft.com/en-us/library/b6x6shw7(v=vs.100).aspx


推荐阅读