【发布时间】:2012-06-03 01:01:44
【问题描述】:
我们需要设计一个安全的网络应用程序。我想提出一个会话处理机制,它对每个请求都进行质询-响应,而不仅仅是在使用CRAM 方法登录时。
原因是为了加强 Web 应用程序以防止会话劫持(例如,CSRF)和重放或中间人攻击。
在某些地方建议使用nonce,但在我们的网络应用中这似乎不切实际,因为异步请求可以继续,或者用户可以打开新窗口、点击返回按钮等。
想法:客户端和服务器有一个共享的秘密(先前建立的用户密码),每个后续请求都会根据该秘密再次进行质询/响应,例如“响应 = 哈希(挑战 + 哈希密码)”。仅当对质询的响应匹配时,服务器才会执行请求。很像 CRAM 期间,但对每个请求都持续进行。
问题:这是一个可行的想法吗?如果是这样,它肯定已经实施,甚至是某种标准?我们如何在基于 java 或 php 的 webapp 中使用它?
【问题讨论】:
-
它是一个什么样的网络应用程序?如果它是一个常规 Web 应用程序,可以通过常规 Web 浏览器访问,那么每个请求都有身份验证令牌会影响可用性,因为浏览器的历史记录(后退按钮)和并行浏览将不再起作用。
-
客户端怎么知道密码的?
-
Gumbo:可以通过普通的网络浏览器访问。我防止您提到的导航问题的想法是将挑战/响应作为一个请求的一部分进行。例如。 1. 来自客户端的请求,2. 来自服务器的带有挑战和目标 url 的响应,3. 客户端向该 url 发送响应,4. 执行原始请求。或任何其他此类方法。 biziclop: 注册时设置的客户用户密码(以挂号信确认)
-
@Bachi 这将如何防止出现问题?服务器会存储所有以前的挑战吗?
标签: java php security web-applications