如何在Web Api项目中保护Elmah.axd

时间:2015-03-25 10:11:36

标签: asp.net-web-api elmah

我正在使用此Elmah软件包在Web Api项目中记录未处理的异常。

https://github.com/rdingwall/elmah-contrib-webapi/issues/18

该软件包适用于Web API,它成功地将所有未处理的异常记录到Elmah,但是很少担心保护Elmah.axd。我使用Asp.Net Identity Token Bearer身份验证进行API调用,因此默认安全机制在我的情况下无效。我知道如何在我的情况下保护,我想仅允许具有管理员角色的用户。请建议

1 个答案:

答案 0 :(得分:0)

我已经找到了两种克服令牌问题的方法,但是它们在某些方面都存在缺陷,但可以使用:

  1. Elmah.mvc允许您决定要使用的网址,因此如果您禁止访问/ elmah网址,则禁止访问原始elmah,而是添加elmah.mvc的appsetting:
  2. <add key="elmah.mvc.route" value="elmah_very_secure_url"/>
    

    然后,通过提供更安全/随机的网址,您可以成为唯一能够访问它的人。这种方法存在一些安全漏洞,因为它依赖于秘密网址,但是许多网站在向您发送只能用于登录等的网址时确实使用此方法。更多信息可以在security.stackexchange上找到.com关于这种方法的安全性以及影响是什么

    1. 执行您自己的方法,您可以从控制台调用以提供所需的身份验证标头。对于angular来说它看起来像是那样的(这个想法就是你使用截取请求的框架来添加令牌并利用它来发送给elmah):
    2. function elmah(){
          angular.element(document.body)
                 .injector()
                 .get("$http")
                 .get("\elmah")
                 .success(function(response)
                 {
                     var elmahWindow = window.open("");
                     elmahWindow.document.write(response);
                 });
      };
      

      然后,如果在控制台中键入elmah(),则会打开一个新窗口。这种方法看起来足够安全(除非你改变方法接受一些可以在xss或其他东西中滥用的参数),但问题是你只能在elmah中看到原始视图并点击所有网址失败。它可以通过各种方式扩展,但我没有看到一种简单方便的方法来修复它。