【问题标题】:Restricting access to IP of web server when request is from JavaScript请求来自 JavaScript 时限制对 Web 服务器 IP 的访问
【发布时间】:2012-09-15 22:04:43
【问题描述】:

我的应用具有以下架构:

jQueryMobile Web 应用程序 --> 从 ---> 用 C# 创建的 REST API 获取 JSON

我已将 REST API 代码放在 IIS 6 的虚拟目录中。 移动端代码是在网站根目录下运行的……所以大致的文件结构是这样的:

网吧/ /index.html 我的javascript.js /restapi/ 网络配置 全球.asax bin/(一堆 Dlls...)

服务器位于具有以下 IP 转换类型的网络后面(不是真正的 IP...) 例如:

Web 服务器外部 IP:121.131.141.50(带有 URL http://mysite.com/) 内部IP:10.210.2.5 子网:255.255.255.0

我已尝试通过 IP 限制对 restapi 文件夹的访问,因为我希望它只能从 Web 服务器访问。我尝试了 IIS 方法并设置了目录安全设置,还尝试了使用 ServiceAuthorizationManager 类检查 Http 请求中的请求 IP 的方法。
两种方法都给了我相同的结果:通过 Fiddler 限制和测试实际服务调用没有问题,以证明除了 Web 服务器 IP:10.210.2.5 之外的任何 IP 都会抛出 401。我还能够从网络服务器执行它(这是所需的设置)。

但是,一旦移动网站 javascript 调用它,我就会得到未经授权的 401。由于 Javascript 代码是客户端,restapi 假定调用来自客户端的 IP 地址,这当然是被阻止的。

有没有一种简洁的方法来检查调用是否来自 JavaScript 所在的 IP?

或者有没有更好的方法来处理整个事情?! :-/ 有没有办法让网络应用程序特别允许访问restapi 虚拟目录?

【问题讨论】:

  • 您可以访问客户端代码吗?您可以使用自定义 HTTP 标头并在服务器上检查它吗?
  • 如果代码在客户端(Javascript)上运行,请求来自客户端。除了让代码不在客户端而是在其他地方运行之外,没有其他解决方法。

标签: javascript security jquery-mobile iis-6 ip-address


【解决方案1】:

回到基础,您的设置如下所示:

client    <---->    web server
           HTTP

Web 服务器托管客户端可以通过 HTTP 协议从外部请求的文件。 Web 服务器也是您过滤传入请求的地方:

client    <---->    | web server
           HTTP     |
                 IP filter

如果您说您希望 REST 服务只能“在同一台服务器上”访问,这意味着:

client    <---->    web server
           HTTP     ^    |
                    |    |
                    +----+
                     REST

但是,如果服务器只是与自己对话,那么您实际上并不需要一个成熟的 REST 接口。我猜您的实际意思是从服务器下载 HTML 和 Javascript 的客户端可能会通过 REST 从服务器请求其他数据。

client    <---->    web server
           HTTP

          <-------
        HTML, JS files

       -------->
           AJAX

但正如您所见,它的工作方式是客户端从服务器下载 Javascript 文件并在本地执行该 Javascript,然后将 AJAX 请求发送回服务器。请求将始终来自客户端。他们必须。发出这些请求的 Javascript 代码最初来自哪里并不重要。它可以是来自您服务器的脚本,也可以是用户手动输入的。 AJAX 请求是 HTTP 请求,与其他任何 HTTP 请求一样。无论您是否使您的 REST 服务可以从外部访问,您都无法通过生成请求的代码进行过滤。

如果您想将 API 设为非公开,则需要进行身份验证,以便只有注册用户才能访问它。不过,这并没有降低 API 本身的可公开访问性。

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多