PHP高级与高级;安全认证

PHP高级与高级;安全认证,php,Php,我总是通过检查用户在表单中提供的MD5+密码是否与数据库中存储的密码相同来生成身份验证码,如果是,我保存了一个名为“status”的会话变量,该变量等于1。他被记录在案 我很确定这是错误的和不安全的,但我从未见过任何其他方法。你们能帮我吗?:) 您应该使用更强大的散列,例如SHA512。在PHP中创建高质量的面向对象登录系统。我认为它涵盖了大多数基础,并且经过深思熟虑,它也非常接近您正在使用的解决方案。我同意远离MD5,但也可能通过重复几次来扩展哈希。关于安全的更多想法: 单独的会话检查容易受到

我总是通过检查用户在表单中提供的MD5+密码是否与数据库中存储的密码相同来生成身份验证码,如果是,我保存了一个名为“status”的会话变量,该变量等于1。他被记录在案


我很确定这是错误的和不安全的,但我从未见过任何其他方法。你们能帮我吗?:)

您应该使用更强大的散列,例如SHA512。

在PHP中创建高质量的面向对象登录系统。我认为它涵盖了大多数基础,并且经过深思熟虑,它也非常接近您正在使用的解决方案。

我同意远离MD5,但也可能通过重复几次来扩展哈希。关于安全的更多想法:

单独的会话检查容易受到会话劫持(也称为sidejacking)的攻击,我会在会话中存储一个唯一的id,并将其与用户IP和浏览器UA字符串一起存储在DB记录中,以帮助在一定程度上缓解这种情况(另请参阅)


如果您没有使用SSL提交登录表单,那么您的密码将以明文形式发送(或者如果您使用的是基本HTTP身份验证,则密码将非常模糊,未加密)。我会考虑使用一些系统或使用摘要身份验证来代替。

对于网站安全问题没有简单的解决方法,因此对于冗长的回答,我深表歉意:

用户登录后如何识别他们?如果URL中有会话ID,则可以读取该ID并劫持会话。如果使用标准cookie,则可以再次读取cookie并劫持会话。这与密码上使用的哈希函数类型无关

要确保安全,请使用SSL(或类似加密)并使用安全标志设置会话cookie

问题是您只能通过SSL验证用户的身份。为了避免必须通过SSL为网站的所有页面提供服务,必须使用两个会话cookie,一个是安全的,在安全身份验证(登录)期间启动;另一个是标准的,在用户第一次点击非SSL页面时启动。任何私有或受保护的数据都必须通过SSL提供,并且每次点击时都要检查安全cookie

当然,会话数据应该存储在数据库中,而不是cookie中。cookie中只能使用会话ID或类似的唯一字符串

这样,任何试图劫持活动会话的人只能到达非ssl页面

IP地址可以被欺骗,这与用户代理相同,所以这些地址不应该被用作用户标识的一部分。此外,用户的IP地址可能在会话期间发生变化(例如,在负载平衡器、匿名器或某些ISP之后),从而导致注销

还要注意便宜的SSL证书。它们并不都是安全的

不幸的是,PHP的本机会话处理不安全,因此良好的应用程序设计至关重要

当涉及到用户密码时,强制使用长密码(至少8个字符),该密码包含大写、小写数字和符号字符的混合

还可以通过在一定次数的登录尝试失败后阻止用户一段时间来防止暴力攻击

如果您提供了通过电子邮件重置密码的功能,请确保您的用户知道如何保护他们的电子邮件帐户

事实上,没有什么是100%安全的,但我们可以非常接近,这些是实现这一目标所必需的主要步骤

当然,安全性是相对的,您应该保护用户数据的长度将取决于数据是什么,以及您的站点可能是多少目标。如果您存储的是信用卡详细信息,而且它是一个受欢迎的网站,那么安全性是至关重要的


如果您存储信用卡详细信息,那么您还需要达到PCI合规性的相关级别。

据我所知,这听起来相对正确且安全。您可能还希望在会话中存储一个id或散列,将会话与用户联系起来。除此之外,你很好…@VinnyCx什么让你认为这是不安全的?我更喜欢在数据库中存储一个加密字符串,然后可以通过不加密的方式使用密码检索它的原始值,这样值就不会丢失。会话固定可能是一个问题,但我同意其余的:似乎很好。