|
|
1
3
一个有趣的想法……我想首先想到的是不要,不是因为它已经完成了,而是因为从一开始它是一个坏主意。但我不会和你讨论会议的利弊,所以我的答案是…… 让我们按令牌的“类型”来细分:
任何人都可以简单地“猜”出其中的一个,但是它们既快又容易使用。由于会话通常是短期的,所以这通常不是一个主要问题。也是一个很好的解决方案,因为它们的大小很小(22字节base64编码的guid,或32字节十六进制)
是的,看起来512字节的ID是很酷的;但是,即使128位的值(16字节)也有很多种可能(一年内服务器处理不了的请求太多)。不要将此作为主要防御,而是假定ID不是秘密。
这很好地“隐藏”了通过传输的信息。你需要吗?值得花这么多开销吗?除了计算/验证开销之外,数据流的数量也有成本。它更安全吗?可能吧,但最终它就像随机ID一样容易被窃取。 始终假定其他人可以获取会话ID/令牌 这就是你应该集中精力的地方,因为如果我能把我的cookie给别人,而我的帐户仍然是安全的,那么只有这样会话才是安全的。也就是说,我不知道有100%的方法可以做到这一点,没有客户证书,甚至有问题。 在Web请求世界中,一个请求包含两个客户机标识信息。客户端IP地址和用户代理。问题是这些值可以为会话更改。因此,一种方法是在每次这些更改时重新提示进行验证,或者对每个不同的值进行验证。 是的,我知道一个用户代理很容易伪造,客户机IP地址也可能被欺骗;但是,在一天结束时,你让别人更难攻击。这是安全的重点,因为没有什么是绝对安全的。 更多建议
最后… 我再说一次,会议规模不大,除了少数几个地方,其他地方都应该避免。 更新: 所以我从上一篇文章开始就考虑过这个问题,我想我会用另一个答案更新我的想法… 生成16字节或更大的ID应该足以有效地消除攻击者猜测会话ID的情况。假设这和使用ssl+安全cookies,您应该尽可能的安全。为什么? SSL将有效地防止某人在传输过程中获取会话密钥。因此,如果有人有一个不属于他们的会话密钥,那是因为他们正在做两件事之一:a)他们在客户机上运行代码(可能在浏览器中),或b)他们在服务器上运行代码。所以,基本上,如果他们能破坏一个端点,那么你已经失去了安全游戏,而且他们很可能不会通过任何额外的工作获得什么好处。 如果您不使用SSL,那么您就没有任何安全性。简单的中间人攻击会让攻击者为客户做任何我想做的事情。在没有SSL(或某种形式的安全协商会话密钥)的情况下,任何保护HTTP使用的工作都只是安全的借口。是的,你可以让它更困难,但你不能让它安全。 因此,最后,只需信任ssl就可以完成保护传输的工作,并继续使用life:) |
|
|
2
3
|
|
|
3
2
会话处理中的弱点是服务器对指定会话的识别,因为它必须是信息的一部分,所以客户机将提供给服务器。 因此,我鼓励对密钥进行一些加密,并使其失效。 您可以将密钥存储在cookie、url或任何适合您需要的地方。 |
|
|
4
0
一次吃一个:
如果我要重新构建ASP.NET的会话处理,那么我要添加一件事:一个随机更改的值,指示下一个被接受的“请求令牌”。这应该是尽可能不可猜测的。 此密钥将在每次响应时发送到浏览器,并通过每个请求发送回浏览器。该站点将验证该密钥是否对此请求有效,并为响应生成一个新的密钥。 这将确保即使记录了浏览器和服务器之间的数据流,也无法重播。例如:
在这个场景中,坏人重放的唯一方法是发送一个带有最后一个接收到的令牌的全新请求。但是,一旦真正的浏览器发送了一个新的请求,他们就会收到一个很好的安全违规通知,并且会通知您。 从这里你可以做很多其他的事情来进一步锁定它。这只是减轻特定类型攻击的一个想法。 更新 评论中的一个问题是关于并发请求。一般来说,浏览器会对CSS、图像、javascript等工件发出多个GET请求。这些请求不应包含在安全测试中。但是,浏览器每次只能发出一个POST请求,因此每个POST请求都应该触发验证并将新值发送回浏览器。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |