cru*_*ble 27 javascript security ajax web-services wcf-web-api
这可能是一个通用的安全问题,但我想我会在我正在开发的内容中提出这个问题.
场景是:一个Web服务(WCF Web Api),它使用API Key来验证并告诉我用户是谁,以及前端的jQuery和应用程序的混合.
一方面,流量可以是https,因此无法检查,但如果我每个用户使用相同的密钥(比如一个guid),并且我在两者中都使用它,那么就有可能采取它并且有人可以冒充用户.
如果我实现类似于OAuth的东西,那么会生成一个用户和每个应用程序密钥,这可能会起作用 - 但是对于jQuery方面,我还需要javascript中的应用程序API密钥.
如果某人在实际计算机上并且执行了视图源,那么这只会是一个问题.
我该怎么办?
我敢肯定这可能是一个常见的问题 - 所以任何指针都会受到欢迎.
为了使这更清楚 - 这是我写的API,我写的是我要查询,而不是谷歌等.所以我可以做每个会话令牌等,我只是想找出最好的方法来保护客户端我会用的代币/钥匙.
我在这里有点过于谨慎,但只是用它来学习.
Ken*_*old 18
(我建议标记这篇文章"安全".)
首先,你应该清楚你正在保护什么.你能信任客户吗?一个狡猾的用户可以在您的页面上粘贴Greasemonkey脚本,并准确调用您的UI调用发送请求的代码.将所有内容隐藏在Javascript闭包中只意味着您需要一个调试器; 它不会使攻击变得不可能.Firebug可以跟踪HTTPS请求.还要考虑受感染的客户端:是否安装了键盘记录器?整个系统是否秘密运行虚拟化,以便攻击者可以随时随地检查内存的任何部分?当你像webapp一样暴露时的安全性真的很棘手.
尽管如此,您可以考虑以下几点:
考虑不是实际使用密钥而是使用HMAC哈希,例如,您在认证时立即提供的令牌.
DOM存储可能比cookie更难捅.
有关示例安全模型,请查看Google的OAuth 2实现.基本上,您使用的令牌仅在有限时间内有效(并且可能对于单个IP地址有效).这样即使令牌被拦截或克隆,它也仅在很短的时间内有效.当然,当令牌用完时你需要小心你做的事情; 攻击者可能只是做你的代码所做的事情并得到一个新的有效令牌吗?
不要忽视服务器端安全性:即使您的客户端在提交请求之前已经检查过,如果用户实际上有权执行他们要求的操作,请再次检查服务器.事实上,这个建议可以消除上述大部分内容.
这取决于API密钥的使用方式.Google提供的API密钥与发起请求的网站的网址相关联; 如果您尝试在具有备用URL的站点上使用该密钥,则该服务将引发错误,从而无需保护客户端上的密钥.
一些基本的API但被绑定到客户端,并且可以跨多个域使用,所以在这种情况下我以前用包裹在服务器端代码这个API,并把关于如何在客户端可以与本地服务进行通信的一些限制的做法了并保护服务.
然而,我的总体建议是对Web API应用如何使用密钥的限制,从而消除了尝试在客户端上保护密钥的复杂性和必要性.
小智 0
有关更多信息,请参阅http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx信息(如何在 .NET 4 中对 REST 服务进行 API 密钥验证)
| 归档时间: |
|
| 查看次数: |
10716 次 |
| 最近记录: |