什么是创建安全登录过程的正确方法?

bon*_*nny 1 html php security cookies session

我想知道什么是创建登录过程的正确方法.

到目前为止,我认为创建一个$_SESSION['login']甚至是$_COOKIE['login']两个都具有相同内容的好方法是一种时间戳加密码的加密形式.

这个想法背后的逻辑是检查两者是否存在并比较它们的内容.如果两者都存在并且内容相等,则可以访问受保护的页面.

我知道Cookie是一种Session.Cookie将存储在用户客户端站点和会话中,但只有在浏览器打开时才会存在.我认为即使关闭浏览器并破坏会话,也可以延长会话的生命周期.

这应该确保SESSION不会被黑客攻击并且COOKIE被盗,这使得黑客无法访问用户的个人资料.

我对这个想法是对的,或者你是怎么做到的?

非常感谢.

Hal*_*yon 5

首先,您需要了解会话和cookie之间的区别.

会话和cookie都是key => value store.但是,它们存储的位置对其安全属性有很大影响.

Cookie存储在客户端计算机上.他们不安全.用户可以修改cookie的值,忘记cookie,发送更多cookie等.Cookie可以存储很长一段时间(几个月,几年).由于客户端存储cookie,因此您不必过多担心空间限制.请记住,所有cookie都随每个请求一起发送.

你在cookies中存储的东西通常是相当无关紧要的东西,比如某些偏好设置或"我已经看过你的弹出窗口问我调查问卷".

会话数据存储在服务器上,只有服务器可以从中读取并写入它.用户永远不会看到会话中的内容.会话数据通常会很快到期,比方说在30分钟到24小时之间.

但是,您如何知道哪个会话属于哪个访问者?好吧,你使用会话标识符cookie.这是身份验证所需的唯一cookie.在PHP中,这个cookie是PHPSESSID在你打电话时自动创建和使用的session_start();.会话cookie是一个具有难以"猜测"的随机值的cookie,这使其安全.

用户将保留会话cookie.您可以找到关联的会话数据(自动使用$_SESSION).在会话数据中,您可以存储用户是否已登录,如果是这样,您甚至可以存储用户拥有的权限(如迷你缓存).您可以将其视为不可缓冲的key => value store,只需确保不要存储太多(限制取决于存储机制).

会话存储在特定的地方; 哪取决于您的网络服务器和操作系统.在PHP中,您可以通过调用指定自己的会话存储处理程序session_set_save_handler.例如,这允许您将会话数据保存在数据库中.

如果会话标识符cookie的值以某种方式暴露,攻击者可以劫持会话.它可以通过在wifi接入点(如条形图中)使用不安全的连接来暴露.要反击这个使用HTTPS; 通过HTTPS发送的cookie是加密的,并且不受这种中间人攻击的影响.这就是Firesheep插件所做的事情(2010年)