phpwind的数据表中,密码采用单纯一次md5加密的方式。所有的密码经过一次md5之后存入数据库。这在当今来说,并不是什么安全的方式。因为假设,你的数据库被人盗取,那么用户的密码也几乎被人盗取。因为现在甚至有在线破解md5值的网站,已经积累了大量的数据,简单的位数短的密码可以直接还原。让你的隐私无处循形。
而在本博中,我曾提到过一次discuz的加密方式,http://www.akii.org/discuz_md5_salt/,其采用salt方式,将一个随机字串的md5值与密码的md5方式再次md5之后存入数据库。当然同时也要存储这个随机字串。假设用户数据库被人盗取后,也无法通过被md5的值来获取用户密码。这在很大程度上保证了用户的隐私安全。
phpwind的cookie加密方式,采用用户浏览器信息加用户的md5后的密码再加论坛的一个cookie加密字串(安全时随机生成,可更改)来形成一个字串,再能冠军base_64方式来加密后存入cookie。这种加密方式还是比较可取的。因为用户的浏览器信息是不能完全摸拟的。而且phpwind提供了一项设置,即如果用在企业网络中,可能就是一个大型的局域网,可以针对网域本身进行检查。以实现不能网段间的正常浏览。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//cookie加密,采用用户信息和加密字串加密码的md5值
function
PwdCode(
$pwd
){
return
md5(
$GLOBALS
[
'pwServer'
][
'HTTP_USER_AGENT'
].
$pwd
.
$GLOBALS
[
'db_hash'
]);
}
//base_64加解密码,用以存入和读取cookie中的加密字符串
function
StrCode(
$string
,
$action
=
'ENCODE'
){
$action
!=
'ENCODE'
&&
$string
=
base64_decode
(
$string
);
$code
=
''
;
$key
=
substr
(md5(
$GLOBALS
[
'pwServer'
][
'HTTP_USER_AGENT'
].
$GLOBALS
[
'db_hash'
]),8,18);
$keylen
=
strlen
(
$key
);
$strlen
=
strlen
(
$string
);
for
(
$i
=0;
$i
<
$strlen
;
$i
++) {
$k
=
$i
%
$keylen
;
$code
.=
$string
[
$i
] ^
$key
[
$k
];
}
return
(
$action
!=
'DECODE'
?
base64_encode
(
$code
) :
$code
);
}
|
而phpwind后台,因为要加入时间,默认为1800秒,所以把时间变量也加入了cookie
1
2
|
$CK
=
array
(
$timestamp
,
$_POST
[
'admin_name'
],md5(PwdCode(md5(
$_POST
[
'admin_pwd'
])).
$timestamp
),
$safecv
);
Cookie(
'AdminUser'
,StrCode(implode(
"\t"
,
$CK
)));
|