我总是通过检查表单中用户提供的传递的MD5 +盐是否与存储在数据库中的那个相同来制作我的验证码,如果是,我保存了一个名为"status"的会话变量,等于1.他被记录了.
我很确定这是错误和不安全的,但我从未见过任何其他方法.你们能帮助我吗?:)
网站安全没有简单的解决方案,所以对于长期答案道歉:
如何在用户登录后识别用户?如果它在URL中有会话ID,则可以读取并且会话被劫持.如果它是标准cookie,则可以再次读取cookie并且会话被劫持.这与密码上使用的散列函数的类型无关.
为了安全起见,请使用SSL(或类似的加密)并使用安全标志设置会话cookie.
那么问题是你只能通过SSL验证用户的身份.为了避免必须通过SSL提供网站的所有页面,必须使用两个会话cookie,一个是安全的,并在安全认证(登录)期间启动另一个标准,并在用户首次点击非SSL页面时启动.必须通过SSL提供任何私有或受保护的数据,并在每次点击时检查安全cookie.
当然会话数据应该存储在数据库中,而不是cookie中.cookie中只应使用会话ID或类似的唯一字符串.
这样,任何试图劫持活动会话的人都只能获得非ssl页面.
IP地址可能是欺骗性的,与用户代理相同,因此不应将这些用作用户标识的一部分.此外,用户的IP地址可能在会话期间发生变化(例如,在负载均衡器,匿名者或某些ISP之后),从而导致注销.
还要注意廉价的SSL证书.它们并非都安全.
不幸的是,PHP的本机会话处理并不安全,因此良好的应用程序设计至关重要.
当涉及到用户的密码时,强制使用包含大写,小写数字和符号字符的长(最少8个字符)密码.
在一定次数的登录尝试失败后,通过阻止用户一段时间来防止暴力攻击.
如果您提供通过电子邮件重置密码的工具,请确保您的用户知道要保护他们的电子邮件帐户.
事实上,没有什么是100%安全的,但我们可以非常接近,这些是实现这一目标所必需的主要步骤.
当然,安全性是相对的,您应该保护用户数据的长度取决于数据的内容以及您的网站可能有多少目标.如果您要存储信用卡详细信息并且它是一个受欢迎的网站,那么安全性是至关重要的.
如果您存储信用卡详细信息,那么您还需要达到相关的PCI合规水平.