电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP安全-永久登錄

瀏覽:101日期:2022-09-11 18:19:25
永久登錄

永久登錄指的是在瀏覽器會話間進行持續(xù)驗證的機制。換句話說,今天已登錄的用戶明天依然是處于登錄狀態(tài),即使在多次訪問之間的用戶會話過期的情況下也是這樣。

永久登錄的存在降低了你的驗證機制的安全性,但它增加了可用性。不是在用戶每次訪問時麻煩用戶進行身份驗證,而是提供了記住登錄的選擇。

圖7-2. 攻擊者通過重播用戶的cookie進行未授權訪問

據我觀察,最常見的有缺陷的永久登錄方案是將用戶名和密碼保存在一個cookie中。這樣做的誘惑是可以理解的——不需要提示用戶輸入用戶名和密碼,你只要簡單地從cookie中讀取它們即可。驗證過程的其它部分與正常登錄完全相同,因此該方案是一個簡單的方案。

不過如果你確實是把用戶名和密碼存在cookie中的話,請立刻關閉該功能,同時閱讀本節(jié)的余下內容以找到實現更安全的方案的一些思路。你將來還需要要求所有使用該cookie的用戶修改密碼,因為他們的驗證信息已經暴露了。

永久登錄需要一個永久登錄cookie,通常叫做驗證cookie,這是由于cookie是被用來在多個會話間提供穩(wěn)定數據的唯一標準機制。如果該cookie提供永久訪問,它就會造成對你的應用的安全的嚴重風險,所以你需要確定你保存在cookie中的數據只能在有限的時間段內用于身份驗證。

第一步是設計一個方法來減輕被捕獲的永久登錄cookie造成的風險。盡管cookie被捕獲是你需要避免的,但有一個深度防范流程是最好的,特別是因為這種機制即使是在一切運行正常的情況下,也會降低驗證表單的安全性。這樣,該cookie就不能基于任何提供永久登錄的信息來產生,如用戶密碼。

為避免使用用戶的密碼,可以建立一個只供一次驗證有效的標識:

CODE:

<?php

$token = md5(uniqid(rand(), TRUE));

?>

你可以把它保存在用戶的會話中以把它與特定的用戶相關聯,但這并不能幫助你在多個會話間保持登錄,這是一個大前提。因此,你必須使用一個不同的方法把這個標識與特定的用戶關聯起來。

由于用戶名與密碼相比要不敏感一些,你可以把它存在cookie中,這可以幫助驗證程序確認提供的是哪個用戶的標識。可是,一個更好的方法是使用一個不易猜測與發(fā)現的第二身份標識。考慮在保存用戶名和密碼的數據表中加入三個字段:第二身份標識(identifier),永久登錄標識(token),以及一個永久登錄超時時間(timeout)。

mysql> DESCRIBE users;

+------------+------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+------------------+------+-----+---------+-------+

| username | varchar(25) | | PRI | | |

| password | varchar(32) | YES | | NULL | |

| identifier | varchar(32) | YES | MUL | NULL | |

| token | varchar(32) | YES | | NULL | |

| timeout | int(10) unsigned | YES | | NULL | |

+------------+------------------+------+-----+---------+-------+

通過產生并保存一個第二身份標識與永久登錄標識,你就可以建立一個不包含任何用戶驗證信息的cookie。

CODE:

<?php

$salt = ’SHIFLETT’;

$identifier = md5($salt . md5($username . $salt));

$token = md5(uniqid(rand(), TRUE));

$timeout = time() + 60 * 60 * 24 * 7;

setcookie(’auth’, '$identifier:$token', $timeout);

?>

當一個用戶使用了一個永久登錄cookie的情況下,你可以通過是否符合幾個標準來檢查:

CODE:

<?php

/* mysql_connect() */

/* mysql_select_db() */

$clean = array();

$mysql = array();

$now = time();

$salt = ’SHIFLETT’;

list($identifier, $token) = explode(’:’, $_COOKIE[’auth’]);

if (ctype_alnum($identifier) && ctype_alnum($token))

{

$clean[’identifier’] = $identifier;

$clean[’token’] = $token;

}

else

{

/* ... */

}

$mysql[’identifier’] = mysql_real_escape_string($clean[’identifier’]);

$sql = 'SELECT username, token, timeout

FROM users

WHERE identifier = ’{$mysql[’identifier’]}’';

if ($result = mysql_query($sql))

{

if (mysql_num_rows($result))

{

$record = mysql_fetch_assoc($result);

if ($clean[’token’] != $record[’token’])

{

/* Failed Login (wrong token) */

}

elseif ($now > $record[’timeout’])

{

/* Failed Login (timeout) */

}

elseif ($clean[’identifier’] !=

md5($salt . md5($record[’username’] . $salt)))

{

/* Failed Login (invalid identifier) */

}

else

{

/* Successful Login */

}

}

else

{

/* Failed Login (invalid identifier) */

}

}

else

{

/* Error */

}

?>

你應該堅持從三個方面來限制永久登錄cookie的使用。

lCookie需在一周內(或更少)過期

lCookie最好只能用于一次驗證(在一次成功驗證后即刪除或重新生成)

l在服務器端限定cookie在一周(或更少)時間內過期

如果你想要用戶無限制的被記住,那只要是該用戶的訪問你的應用的頻度比過期時間更大的話,簡單地在每次驗證后重新生成標識并設定一個新的cookie即可。

另一個有用的原則是在用戶執(zhí)行敏感操作前需要用戶提供密碼。你只能讓永久登錄用戶訪問你的應用中不是特別敏感的功能。在執(zhí)行一些敏感操作前讓用戶手工進行驗證是不可替代的步驟。

最后,你需要確認登出系統(tǒng)的用戶是確實登出了,這包括刪除永久登錄cookie:

CODE:

<?php

setcookie(’auth’, ’DELETED!’, time());

?>

上例中,cookie被無用的值填充并設為立即過期。這樣,即使是由于一個用戶的時鐘不準而導致cookie保持有效的話,也能保證他有效地退出。

標簽: PHP
相關文章:
主站蜘蛛池模板: 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 环比机械| 泰安办公家具-泰安派格办公用品有限公司 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 协议书_协议合同格式模板范本大全 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 小型手持气象站-空气负氧离子监测站-多要素微气象传感器-山东天合环境科技有限公司 | 科箭WMS仓库管理软件-TMS物流管理系统-科箭SaaS云服务 | 首页_中夏易经起名网| 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 广东西屋电气有限公司-广东西屋电气有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 |