我有一个公共Web应用程序,它在ASMX文件中调用ASP.NET Web方法,该文件位于IIS中的同一站点文件夹中。但是,为了防止僵尸程序直接ping服务,我们希望保护API,以便只有我们的HTML 5客户端页面才能访问它。你有什么建议我应该如何实现这种事情?不是太多,只是一个简单的机制,不需要一个星期的测试请。不必是100%完全证明方法,因为它是公共数据,API只是抽出数据,而不是插入任何东西。只是为了限制DDOS攻击API的可能性。
答案 0 :(得分:2)
我过去解决这个问题的方法是使用自定义标题。
基本上,如果您的网页使用某种形式的AJAX调用来回调您的服务层,那么您可以使用以下内容:
xhr.setRequestHeader('custom-header','value');
其中'xhr'是您在Javascript中构建的XML Http请求
当然,您也可以采用更简单的方法将参数添加到您的调用查询字符串中,EG:
在你的ajax电话中,请求:
http://my.services/service.asmx?somesecretkey=foobar
而不仅仅是
http://my.services/service.asmx
然后您可以使用请求的查询字符串收集服务器端查看它是否存在,如果不存在则拒绝连接。
您甚至可以在首先传递给页面的数据中提供一些种子值,然后使用该种子值创建一个唯一值(服务器也可以计算一个),该值在您的页面中返回请求服务器。
这样做可以提供更高级别的安全性,因为这些值是半随机的,并且不容易让机器人猜测。
还要记住,如果您控制调用页面,并且您通过ajax执行此操作,那么您也可以将此键放在post变量集合中,这样就不必在get请求中显示它。