首页 / 知识
关于安全性:防止会话劫持的最佳方法是什么?
2023-04-12 22:15:00

What is the best way to prevent session hijacking?具体来说,这是关于使用客户端会话cookie标识服务器上的会话时的问题。 是对整个网站使用SSL/HTTPS加密的最佳答案,并且您有最好的保证,中间没有人能够嗅探现有客户端会话cookie? 对存储在会话cookie中的会话值本身使用某种加密也许是第二好的选择? 如果恶意用户对机器有物理访问权,他们仍然可以查看文件系统以检索有效的会话cookie并使用它来劫持会话? 加密会话值将没有任何效果。会话cookie已经是一个任意值,加密它只会生成另一个可以被嗅探的任意值。 唯一真正的解决方案是HTTPS。如果您不想在整个站点上执行SSL(可能您有性能方面的问题),那么您可能只需要使用SSL来保护敏感区域就可以避免这种情况。为此,首先确保您的登录页面是https。当用户登录时,除了常规会话cookie之外,还要设置一个安全cookie(意味着浏览器将只通过SSL链接传输它)。然后,当用户访问您的"敏感"区域时,将其重定向到HTTPS,并检查是否存在该安全cookie。真正的用户会拥有它,会话劫持者不会。 编辑:这个答案最初写于2008年。现在是2016年了,没有理由不在整个站点上使用SSL。不再是纯文本HTTP! SSL只对嗅探攻击有帮助。如果攻击者可以访问您的计算机,我假设他们也可以复制您的安全cookie。 至少,确保老饼干在一段时间后失去价值。当cookie停止工作时,即使成功的hijaking攻击也会被阻止。如果用户的cookie来自一个多月前登录的会话,请让他们重新输入密码。确保每当用户单击站点的"注销"链接时,旧会话UUID就不能再次使用。 我不确定这个想法是否可行,但这里是:在会话cookie中添加一个序列号,可能是这样的字符串: sessionUid,序列号,当前日期/时间 加密此字符串并将其用作会话cookie。定期更改序列号-可能是在cookie 5分钟后,然后重新发布cookie。如果你愿意的话,你甚至可以在每个页面视图上重新发布它。在服务器端,保存您为该会话发出的最后一个序列号的记录。如果有人发送了一个序列号错误的cookie,这意味着攻击者可能正在使用他们之前拦截的cookie,因此会使会话UUID无效,并要求用户重新输入密码,然后重新发布一个新的cookie。 请记住,您的用户可能有多台计算机,因此他们可能有多个活动会话。不要做任何强迫他们每次在计算机之间切换时重新登录的事情。 你考虑过读一本关于PHP安全的书吗?强烈推荐。 对于非SSL认证站点,我使用以下方法取得了很大的成功。 dis允许在同一个帐户下进行多个会话,请确保您不会仅通过IP地址检查。而是通过登录时生成的令牌进行检查,该令牌存储在数据库中的用户会话中,以及IP地址、HTTP用户代理等 使用基于关系的超链接生成链接(例如http://example.com/secure.php?)令牌=2349DF98SDF98A9ASDF8FAS98DF8)链接附加了一个x字节(首选大小)随机salted md5字符串,在页面重定向时,随机生成的令牌对应于请求的页面。
短寿命会话身份验证cookie。如上所述,一个包含安全字符串的cookie是一个好主意,它是会话有效性的直接引用之一。使其每x分钟过期一次,重新颁发该令牌,并将会话与新数据重新同步。如果数据中有任何不匹配的地方,要么注销用户,要么让他们重新验证会话。 我决不是这个问题的专家,我在这个问题上有一些经验,希望其中的一些能帮助任何人。
它所做的是捕获有关用户会话的"上下文"信息,这些信息片段在单个会话的生命周期中不应更改。一个用户不会同时在美国和中国的计算机上,对吗?因此,如果IP地址在同一个会话中突然发生变化,这强烈意味着会话被劫持,那么您可以通过结束会话并强制用户重新进行身份验证来确保会话的安全。这阻碍了黑客的尝试,攻击者也被迫登录,而不是获得对会话的访问权。通知用户尝试(Ajax-It向上一点),而vola,稍微恼火+知情用户,他们的会话/信息受到保护。 我们引入了用户代理和x-forwarded-for,以便尽最大努力为代理/网络后面的系统捕获会话的唯一性。你可能会使用更多的信息,然后,感到自由的创造性。 虽然不是100%,但效果相当好。 当用户离开网站并返回时,您可以做更多的工作来保护会话,使其过期,可能会迫使他们重新登录。您可以通过捕获一个空白的HTTP引用(在URL栏中键入了域)来检测用户的离开和返回,或者检查HTTP引用中的值是否等于您的域(用户单击了一个外部/精心设计的链接以访问您的站点)。 使会话过期,不要让它们无限期地保持有效。 不要依赖cookie,它们可能会被窃取,这是会话劫持攻击的载体之一。 尝试本文中由Liu、Kovacs、Huang和Gouda描述的安全cookie协议: 如文件所述:
至于便于部署:
简而言之:它是安全的,轻便的,对我来说非常有用。 没有办法100%阻止会话隐藏,但是通过某种方法,我们可以减少攻击者隐藏会话的时间。 防止会话隐藏的方法: 1-始终使用带有SSL证书的会话; 2-仅在httpOnly设置为true时发送会话cookie(防止javascript访问会话cookie) 2-在登录和注销时使用会话重新生成ID(注意:不要在每个请求中使用会话重新生成,因为如果您有连续的Ajax请求,那么您就有机会创建多个会话)。 3-设置会话超时 4-将浏览器用户代理存储在$_会话变量中,并在每次请求时与$_服务器['http_user_agent']进行比较。 5-设置一个令牌cookie,并将该cookie的过期时间设置为0(直到浏览器关闭)。为每个请求重新生成cookie值。(对于Ajax请求,不要重新生成令牌cookie)。前任:
注意:不要使用Ajax请求重新生成令牌cookie注意:上面的代码就是一个例子。注意:如果用户注销,则必须销毁cookie令牌和会话 6-使用用户IP来防止会话隐藏不是一个好方法,因为有些用户的IP会随着每个请求而改变。影响有效用户的 7-我个人将会话数据存储在数据库中,这取决于您采用什么方法 如果你在我的方法中发现错误,请纠正我。如果你有更多的方法来阻止会话hyjaking,请告诉我。 确保会话ID不使用递增整数。更好的方法是使用guid或其他随机生成的长字符串。 有许多方法可以防止会话劫持,但所有方法都会降低用户满意度或不安全。
afaik会话对象在客户端不可访问,因为它存储在Web服务器上。但是,会话ID存储为cookie,它允许Web服务器跟踪用户的会话。 为了防止使用会话ID进行会话劫持,可以在会话对象内存储哈希字符串,该字符串由两个属性(远程地址和远程端口)组合而成,可以在请求对象内的Web服务器上访问这些属性。这些属性将用户会话绑定到用户登录的浏览器。 如果用户从另一个浏览器或同一系统上的一个匿名模式登录,IP地址将保持不变,但端口将不同。因此,当访问应用程序时,Web服务器将为用户分配不同的会话ID。 下面是我通过将会话ID从一个会话复制到另一个会话来实现和测试的代码。它工作得很好。如果有漏洞,告诉我你是怎么模拟的。
我使用了sha-2算法来散列值,使用了在baeldung的sha-256散列中给出的示例 期待您的评论。 让我们考虑一下,在登录阶段,客户机和服务器可以就一个秘密的salt值达成一致。此后,服务器在每次更新时都提供一个count值,并期望客户机使用(secret salt+count)的散列进行响应。潜在的劫持者没有任何方法获得这个秘密的盐值,因此无法生成下一个哈希。 为了降低风险,您还可以将原始IP与会话关联起来。这样,攻击者必须在同一专用网络内才能使用会话。 检查referer头也可以是一个选项,但是这些头更容易被欺骗。 保护:
|
最新内容
相关内容
python的调用绑定方法和非绑定方法
python的调用绑定方法和非绑定方法,代码,方法,实例,第一,培训,时计,奇数,偶数,参数,定义,在Python中,如果用实例去调用方法,这种限制就被称为Pypython3标识符是什么?
python3标识符是什么?,数字,培训,名字,标识符,开头,代表,函数,大小写,变量,结尾,python中的标识符是用于识别变量、函数、类、模块以及其他对python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗python能做网站吗?
python能做网站吗?,网站,工程,认证,培训,系统,服务,框架,页面,初始化,性功能,python可以做网站,Python有很多优秀的网站框架,可以非常快速的建做网站用php还是python方便
做网站用php还是python方便,网站,培训,语法,轮子,相比之下,模版,根本,实际,成本,以上,单纯说做网站,显然是php更适合,php是专为web而生,而PythonPython如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__iniPython静态函数和普通方法的区别
Python静态函数和普通方法的区别,培训,方法,静态,区别,实例,函数,属性,结果,例子,下面,下面通过一个例子,讲解Python静态函数、普通方法、类方python中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python中类对象和方法的区别是什么
python中类对象和方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类python看类里有哪些方法
python看类里有哪些方法,信息,员工,培训,名称,方法,函数,冒号,字符串,语句,结尾,python使用class语句来创建一个新类,class之后为类的名称并以python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..