Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过数据包嗅探保护经过身份验证的PHP会话免受会话劫持_Php_Sessionid_Session Hijacking - Fatal编程技术网

通过数据包嗅探保护经过身份验证的PHP会话免受会话劫持

通过数据包嗅探保护经过身份验证的PHP会话免受会话劫持,php,sessionid,session-hijacking,Php,Sessionid,Session Hijacking,我对不使用SSL的PHP会话安全感兴趣 让我惊讶的是,如果中间的人嗅探到用户和服务器之间交换的数据包,那么即使会话经过身份验证,也很容易窃取会话。我知道有一些策略可以限制损害,例如,在登录/注销时更改sessionid,记录/检查用户系统参数(例如操作系统、浏览器) 但是,如果在已通过身份验证且未注销的会话期间(也没有超时的时间),攻击者能够获取会话id,则他可以轻松劫持会话(据我所知,该问题) 我考虑了一个可能的解决方案,在加密的登录身份验证过程中,服务器可以向客户端发送随机会话密码。会话密码

我对不使用SSL的PHP会话安全感兴趣

让我惊讶的是,如果中间的人嗅探到用户和服务器之间交换的数据包,那么即使会话经过身份验证,也很容易窃取会话。我知道有一些策略可以限制损害,例如,在登录/注销时更改sessionid,记录/检查用户系统参数(例如操作系统、浏览器)

但是,如果在已通过身份验证且未注销的会话期间(也没有超时的时间),攻击者能够获取会话id,则他可以轻松劫持会话(据我所知,该问题)

我考虑了一个可能的解决方案,在加密的登录身份验证过程中,服务器可以向客户端发送随机会话密码。会话密码仅在该登录会话期间有效。因此,在该会话期间交换的每条消息都必须使用会话密码(例如MD5(会话密码+消息内容))进行签名


问题解决了吗?假设攻击者无法对初始登录交换进行加密分析,这种方法的弱点是什么?

您可能希望使用类似的方法,而不是使用更简单的MD5,并且您可能希望使用SHA256或更大的方法,因为MD5已知有弱点,而SHA-1也开始感到虚弱

但即使进行了这些更改,您的方案仍然容易受到攻击,攻击者可以一次又一次地重新发送请求,而您的服务器每次都会愉快地重新执行请求。如果它只是发布了最近一次海滩之旅的照片,但如果它发送了1000美元小马的购买请求,那么这没什么大不了的,最终会有人得到比他们预期的多得多的小马

因此,您需要在协议中添加一个

可能还有其他问题——毕竟,经过三次SSL迭代之后,TLS现在已经是1.2版了。只要坚持使用TLS就可以了。

您提出的“签名”解决方案需要客户端行为-因此您需要一个能够进行签名的客户端应用程序

如果您正在编写Flash/javaapplet/Unity或任何这些插件,那么您可以按照您的计划进行操作,因为您可以更紧密地控制客户机,并添加例程来进行签名

但我想你是在不使用插件的情况下将HTML页面转移到浏览器?如果是这样,你有两个选择,真的。第一个是SSL(您排除了它),因为它内置在浏览器中。第二个是Javascript。为了获得最大的安全性,您需要以某种方式模拟SSL,包括加密(公共)密钥/算法的客户端存储(这样它们就不会和消息一起传输)。您可能希望尽可能接近SSL的公钥/私钥+握手-这绝非易事。正如sarnold所建议的,您需要一个强大的加密密钥。查看一个例子——其他人在谷歌上出现

如果这有点过分,您最可行的解决方案可能是使用JS协商一个更简单的加密算法:您发送一个“密钥”,将“密钥”存储在浏览器上的cookie中,所有通信都通过AJAX进行,并基于该密钥创建一个更简单的签名机制(可能还有客户端在初始握手时与您共享的另一个变量)。任何未解码或与密钥不匹配的内容,请终止整个会话并重新启动



Snnod在回答MD5和SHA-1方面有很好的观点,有些人甚至认为SHA256在今天的计算机上会受到重视,但是考虑到你需要在JS中提出一个解决方案,为了速度,你可能会被束缚在“轻率”(我的类比)上。与md5一样。因此,您最好的防御措施是准确的日志记录和暴力/错误检测。任何到达的消息都是乱码(您可以在任意一端进行检查)应该记录和监视。太多的故障和IP地址被禁止,并且保持日志记录。< /P>没有攻击,但是考虑只使用SSL……一年可能花费大约49到100美元,但是它比支付开发者维护自定义代码< >安全方案< /代码> + 1要便宜得多。没有SSL发送?没有冒犯!;)我只是想从头开始开发我的博客,这样我就可以了解主要问题是什么,比如这个。但在不需要保密的情况下,使用ssl是一种巨大的过度使用(我的观点)。我想的这个方案看起来很简单。。。这就是为什么我想问它是解决了问题还是有缺陷。除了保密性之外,SSL还确保了数据完整性(在数据传输过程中不会修改)。你应该用它,我理解你的问题。如果中间的人截获了来自客户端的登录响应,他仍然能够模拟客户端。服务器会将会话密码发送给错误的人,对吗?但是,他必须知道客户端密码……是的,MD5容易受到前缀攻击。我以MD5为例。不过还是谢谢你。我只是想知道这个计划是否有一些优势。现在你完全正确。谢谢;)我在考虑第二种选择,而那个网站正是我想要的作为SSL和TLS方案的一部分的公钥/私钥方法的问题是,它需要昂贵的签名证书。另一方面,如果用户使用了未经verisign签名的证书,浏览器将向您发出一个大警告,大多数用户将离开。这是为我的博客写的……证书每年只需20美元。示例:。价格上唯一的区别是保险和担保人,真的。为了让非ssl解决方案正常工作,您将花费更多的时间。但是如果我一个人去的话,很高兴我能帮上忙。