假设我们有一个WCF Web服务。其链接如下;
http://www.example.com/service/?api=62383581
62383581是此处的API密钥。我们如何确保服务无法通过循环查找其API密钥?
答案 0 :(得分:3)
我认为讨论应该是“如何让它变得困难”而不是阻止它,因为如果你要将你的服务暴露给公众,你很容易受到攻击。
使困难成为可能的可能性是:
如果您向一组客户提供对您的服务的访问权限,那么您可以在您的服务器上应用IP限制以防止来自任何其他服务的调用,这将阻止来自客户端脚本的任何调用(例如JavaScript) )并将对IP-Spoofing开放
您也可以在服务中设置IP限制。在Message Inspector中,您可以验证IP,如果它不在您的范围内,则抛出异常以防止进一步访问。
使用包含特殊字符的Alpha数字API密钥,使其非常复杂且难以循环(暴力)(我可以为您的方案考虑最合适)
你可以给你的客户一个公钥(每个客户不同)要求他们附加一些标识符,例如密钥,例如api& customerID并使用您的密钥加密它,因为在服务器端您拥有该特定客户端的私钥,反之亦然..(这包含加密解密的开销)
如果您有man in middle,那么这可能会危及上述所有内容。 这些都是为了让事情变得困难,可能需要根据您的具体情况重新思考。
答案 1 :(得分:2)
使用GUID代替Int,使其更难以强制它。
答案 2 :(得分:0)
我想检查来电者的IP地址并阻止相同的IP地址每小时拨打超过n次电话是毫无意义的,因为攻击者会使用欺骗手段来解决这些问题。
我能想到的唯一方法是使用可以检测此类攻击的强大可配置防火墙,或使用Winsnort等入侵防御系统(IPS)。另请参阅http://www.winsnort.com/index.php?module=News&func=display&sid=41
答案 3 :(得分:0)
不受信任的客户端上的程序中包含的任何API密钥都可以按定义泄露。