- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如何防止多个客户端使用相同的 session ID?我问这个是因为我想添加一个额外的安全层来防止我的网站上的 session 劫持。如果黑客以某种方式找出另一个用户的 session ID 并使用该 SID 发出请求,我如何检测到服务器上存在共享单个 SID 的不同客户端然后拒绝劫持尝试?
编辑
经过仔细考虑后,我接受了 Gumbo 的回答,因为我意识到由于 无状态 HTTP 协议(protocol)的限制,我所要求的是不可能的。我忘记了可能是 HTTP 最基本的原理是什么,现在想想这个问题似乎有点琐碎。
让我详细说明我的意思:
用户 A 在 example.com 上登录后,会获得一些随机 session ID,为简单起见,将其设为“abc123”。此 session ID 在客户端存储为 cookie,并通过服务器端 session 进行验证,以确保登录的用户在从一个网页移动到另一个网页时保持登录状态。如果 HTTP 不是无状态的,那么这个 cookie 当然不需要存在。因此,如果用户 B 窃取了用户 A 的 SID,并在他的计算机上创建了一个值为“abc123”的 cookie,那么他将成功劫持用户 A 的 session ,但服务器根本无法合法地识别用户 B 的 session 。请求与用户 A 的请求有任何不同,因此服务器没有理由拒绝任何请求。即使我们要列出服务器上已经处于事件状态的 session 并尝试查看是否有人正在访问已经处于事件状态的 session ,我们如何确定是另一个用户非法访问该 session 而不是同一用户谁已经使用 session ID 登录,但只是尝试用它发出另一个请求(即导航到不同的网页)。我们不能。检查用户代理?可以被欺骗 - 但作为深度防御措施仍然很好。 IP地址?可以出于正当理由进行更改 - 但我建议检查 IP 的前两个八位字节之类的东西,而不是根本不检查 IP 地址,因为即使是数据计划网络上的用户,由于完全合法的原因而不断更改 IP通常只会更改其 IP 的最后两个八位位组。
总而言之,正是无状态 HTTP 谴责我们永远无法完全保护我们的网站免受 session 劫持,但良好的做法(如 Gumbo 提供的做法)足以防止绝大多数 session 攻击.因此,试图通过拒绝同一 SID 的多个请求来保护 session 不被劫持是非常可笑的,并且会破坏 session 的全部目的。
最佳答案
不幸的是,没有有效的方法可以明确地识别出来自攻击者的请求,而不是真正的请求。因为大多数反措施检查的属性,如 IP 地址或用户代理特征,要么不可靠(IP 地址可能在多个请求之间更改),要么很容易伪造(例如 User-Agent 请求 header ),因此可能会产生不需要的误报(即真正的用户切换 IP 地址)或误报(即攻击者能够成功伪造具有相同 User-Agent 的请求)。
这就是为什么防止 session 劫持的最佳方法是确保攻击者无法找到其他用户的 session ID。这意味着您应该设计您的应用程序及其 session 管理(1)攻击者无法通过使用足够的熵来猜测有效的 session ID,以及(2)攻击者没有其他方法可以通过已知攻击获得有效的 session ID/漏洞,如嗅探网络通信、跨站脚本、通过Referer泄露等。
也就是说,你应该:
HttpOnly
和 Secure
属性设置 cookie 以禁止通过 JavaScript 访问(以防 XSS 漏洞)并禁止通过不安全通道传输(参见 session.cookie_httponly和 session.cookie_secure )除此之外,您还应该重新生成 session ID,同时在某些 session 状态更改(例如登录后确认真实性或更改授权/权限)后使旧 ID 无效(参见 session_regenerate_id
function),并且您还可以定期执行此操作以减少成功的 session 劫持攻击的时间跨度。
关于php - 防止 session 劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233406/
当一个对象被实例化时,无论是字符串/函数/等等,__proto__属性(property)包括在内。该属性似乎是由 __proto__ 生成的Object.prototype 中的访问器... Obj
我一直在寻找防止 session 劫持的方法,在这种情况下,有人会窃取 session cookie 并使用它来获得对系统的访问权限。 程序如 http://codebutler.com/firesh
某些 malware such as AVG劫持 404 页面,以便在浏览器中显示一个布满自己广告的页面。 我发现的唯一解决方法是在我的 web 应用程序中放弃自定义错误页面的 404 http 状态
大多数Web应用程序使用cookie来管理用户的 session ,即使关闭了浏览器,也允许您保持登录状态。 让我们假装我们做了书中的所有事情,以确保保存cookie本身。 加密内容 仅设置http
WinError.h中定义的错误代码是否可以被劫持并通过我自己的代码返回? 定义了一些通用 Win32 错误代码: ERROR_FILE_NOT_FOUND:“系统找不到指定的文件。” 当找不到文件时
修改文本然后单击按钮只会触发 onchange 代码 但我需要知道按钮是否被点击: 我需要更改什么才能获取点击处理程序? 最佳答案 效果很好,但 alert() 很糟糕。 我不知道它的确切细节,但
如何保护我的用户免受 session 劫持? 最佳答案 Owasp Top 10 for 2010 中包含三个部分你应该阅读。 1: (!!) A3:“损坏的身份验证和 session 管理。” (!
我有一个问题。我试图在音频元素发生变化时立即获取它的来源,而不是让它连接到服务器。让我详细说明一下:服务器只允许一个请求(随机生成的内容 url),我正在尝试获取该请求,显然我不希望使用新源重新加载音
我需要一种 JavaScript/jQuery 方法来“劫持”不基于类或 ID 的 CSS 定义。 CSS 示例: input { border: 1px solid red; } 如果我有一
一位黑客联系我说他们会使用 session 劫持来关闭我的网站,他说我的文本框存在 session 劫持漏洞。 有没有办法保护文本框免受 session 劫持我用它来逃避和防止 sql 注入(inje
我一直在研究一套安全的登录/门户类型的工具,通用代码没有 SQL 注入(inject)、XSS 等,我有很多东西可以阻止 session 劫持。 为每个页面重新生成 session ID 将用户的IP
在我的 web.xml 中,我为一些资源定义了一个用户数据约束: Personal Area /personal/* U
情况 好吧,正如您在下面看到的,我有一个主应用程序,它创建了一个线程,它创建了一堆后台 worker 。当 RunWorkerCompleted 在某些 BG worker 上被触发时,我有时最终会丢
当我的 golang 应用程序崩溃时,它正在打印 go routines 堆栈跟踪并退出。我想知道是否有很好的方法来获取 panic 输出以进行进一步处理。重定向 stderr 是不够的,因为人们想在
我有一个关于PHP中 session 劫持的问题。我今天早上一直在阅读有关它的信息,我有一些问题在我阅读的文档中并未得到明确回答。 用户可以更改他们在我的网站上的 session 吗?也就是说,如果他
如何防止多个客户端使用相同的 session ID?我问这个是因为我想添加一个额外的安全层来防止我的网站上的 session 劫持。如果黑客以某种方式找出另一个用户的 session ID 并使用该
我想更多地了解 PHP Session Fixation和劫持以及如何防止这些问题。我一直在 Chris Shiflett 的网站上阅读以下两篇文章: Session Fixation Session
DNS 劫持作为最常见的网络攻击方式,是每个站长或者运维团队最为头疼的事情。苦心经营的网站受到 DNS 劫持后,不仅会影响网站流量、权重,还会让用户置身于危险之中,泄露隐私造成财产损失。 就是这样
编辑:对于那些想知道该 SDK 是什么的人来说,它是 Flurry 的中文克隆版,==>> Umeng。 编辑2:在那个奇怪的SDK中实际上有一个禁用崩溃日志处理选项,这将使我的uncaughtExc
我阅读了 Nancy Forms Authentication 的文档.据我所知,那里推荐的方法会导致终身 session ID: "The identifier is the token that
我是一名优秀的程序员,十分优秀!