0

我有一个公共 Web 应用程序,它在位于 IIS 的同一站点文件夹中的 ASMX 文件中调用 ASP.NET Web 方法。但是,为了防止机器人直接 ping 服务,我们希望保护 API,以便只有我们的 HTML 5 客户端页面可以访问它。您对我应该如何实施这种事情有什么建议吗?不要太多,只是一个简单的机制,不需要一周的测试。不必是 100% 完整的证明方法,因为它是公共数据,API 只是将数据抽出,而不是插入任何东西。只是为了限制对 API 进行 DDOS 攻击的可能性。

4

1 回答 1

2

我过去解决这个问题的方法是使用自定义标题。

本质上,如果您的网页使用某种形式的 AJAX 调用来回调您的服务层,那么您可以使用以下内容:

xhr.setRequestHeader('custom-header', 'value');

其中“xhr”是您在 Javascript 中构建的 XML Http 请求

当然,您也可以采取更简单的方法,即在调用查询字符串中添加一个参数,例如:

在您的 ajax 调用中,请求:

http://my.services/service.asmx?somesecretkey=foobar

而不仅仅是

http://my.services/service.asmx

然后您可以只使用请求的查询字符串收集服务器端来查看它是否存在,如果不存在则拒绝连接。

您甚至可以首先在传递给页面的数据中提供一些种子值,然后使用该种子值创建一个唯一值(服务器也可以计算该值),该值会在您的请求中返回给服务器。

这样做会提供更高级别的安全性,因为这些值是半随机的,机器人不容易猜测。

还要记住,如果您控制调用页面,并且您正在通过 ajax 执行此操作,您也可以将此键放入您的 post 变量集合中,这样它就不必在 get 请求中可见。

于 2013-05-27T18:57:46.693 回答