首页 › 程序设计 › php

谈谈PHP中用户登录的问题

泡在网上的日子 / 文 发表于2012-04-10 11:45 第次阅读

简单介绍下用户密码认证机制,用户注册时输入密码后,密码将会进行相应的加密存入数据库,加密的原则是不可逆性,就是让人很难从加密后的变成原有的密码。用户进行密码认证的时候,将其输入的密码进行相同的加密技术,然后与数据库存有的加密后的密码进行对照,然后根据对照结果返回相应的值。

书本上的密码加密采用的是MD5方式,结果发现网上居然有解密库,可以直接根据加密后的代码从密码库中找出原码。然后又找了各种方式,最后觉得相对可行一点的就是md5(md5($pass).$salt)形式。即先将密码进行md5加密,然后给加密后的内容插入随机生成的salt内容,然后再对加了salt之后的字符串进行md5加密,同时salt是存在数据库中的,这样就必须同时拿到加密后的内容和salt值才有可能获取原密码。

下面就是到了cookie和session的问题。加密setcookie()函数进行cookie的设置,其中可以将密码进行加密然后存在cookie中。在网上查找相关方式的时候看到个感觉相对不错的PW使用的方式。与之前提到的加salt值同时两次md5加密的方式类似。但是这里的salt不是随机生成存在数据库的,而是读取的用户客户端信息,即$GLOBALS[‘HTTP_USER_AGENT’的值。设想一下,验证的时候读取用户的客户端信息,然后与密码进行混合加密进行对照,用户的客户端信息完全复制的可能性不是很大,所以相对来说安全性高一点(从我目前的认知角度)。

下面的就是对用户提交的重要的post内容进行加密。这个是在群里与别人讨论的时候提到的,由于普通的网站很少有用到https进行重要内容的加密传送,所以可以采用一种取代方式,即通过js进行加密。在网上找了相关的资料,最后觉得比较好的就是通过随机生成$post_key值,然后自己来编写加密算法,并且将$post_key放入到算法中,就能保证每次每个用户提交的加密都不一样。服务器端再通过PHP算法进行解密,然后进行其他操作。

补充:

可以在用户登录的cookie过期的时候重设存在数据库里面的salt值,入侵获得的数据库中的密文只是临时密文,随时可能会自动改变,某种意义上来说毫无意义。

 

收藏 赞 (0) 踩 (0)
上一篇:PHP autoload机制详解
(1) autoload机制概述 在使用 PHP 的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用inclu
下一篇:PHP+Ajax 实现分页技术的参考范例
基于php和ajax的分页技术代码,其实ajax的分页很容易想到该怎么做,这里主要是给大家梳理一下,以后开发的时候留作参考。 下面有两个php文件,一个是sn_inq.php,另一个是sn_show.php,前一个php文件调用后一个php文件,实现ajax分页,运行sn_inq即可实现效