




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗三實現(xiàn)口令認(rèn)證實驗概述身份認(rèn)證(EntityAuthentication)也稱為實體鑒別,目的是證實一個實體就是所聲稱的實體。計算機系統(tǒng)中,對各種計算資源(如文件、數(shù)據(jù)庫、應(yīng)用系統(tǒng))機密性和完整性的保護,其本質(zhì)是防止用戶對系統(tǒng)進行非授權(quán)的訪問。在處理授權(quán)問題之前,首先需要確認(rèn)用戶的身份。身份認(rèn)證通常是系統(tǒng)安全保護的第一道防線,是訪問控制和責(zé)任追究的基礎(chǔ);認(rèn)證的失敗可能導(dǎo)致整個系統(tǒng)的失敗。這里涉及三個概念:認(rèn)證、授權(quán)及審計。(1)認(rèn)證:對用戶身份的證實。認(rèn)證能防止攻擊者假冒合法用戶獲取訪問權(quán)限。(2)授權(quán):當(dāng)用戶身份被證實后,賦予該用戶進行資源訪問的權(quán)限。(3)審計:每一個用戶都應(yīng)該為自己所做的操作負(fù)責(zé),所以在每個操作后都要留下記錄,以便事后核查。身份認(rèn)證分為單向認(rèn)證和相互認(rèn)證。如果通信的雙方只需要一方(聲稱方)被另一方(驗證方)鑒別身份,這樣的認(rèn)證過程是單向認(rèn)證。在相互認(rèn)證過程中,通信雙方需要互相認(rèn)證對方的身份。用戶的身份認(rèn)證過程通常采用三類憑證驗證實體身份:用戶所知道的信息(如口令、密鑰或記憶的圖形、圖像等),用戶持有的物品(如令牌、智能卡或USBKey等),用戶獨一無二的特征或能力(如指紋、聲音、視網(wǎng)膜血管分布圖或簽字等)。對主機的認(rèn)證通??梢愿鶕?jù)地理位置、IP地址或者硬件地址(MAC地址)、時間、特定場所等作為認(rèn)證依據(jù)。每一種認(rèn)證方法都存在一些問題,如對口令的認(rèn)證,敵手可猜測、竊取口令;對用戶持有的令牌的認(rèn)證,敵手可以盜取令牌,用戶也可能丟失令牌;至于使用生物特征進行認(rèn)證,也存在誤報和漏報、擾動攻擊、用戶的認(rèn)可程度、使用成本和易用性等問題。因此,為提高認(rèn)證系統(tǒng)的強度,可以使用多個因子的認(rèn)證方式,如口令加智能卡,這種認(rèn)證方式稱為多因子認(rèn)證。此次課外實踐將在熟悉認(rèn)證概念的基礎(chǔ)下,使用高級語言實現(xiàn)基于用戶名口令的登錄程序。實驗內(nèi)容技術(shù)說明此次課外實踐設(shè)計的登錄、注冊程序采用B/S架構(gòu)與SSM框架,具有較高的穩(wěn)定性與可復(fù)用性,前端頁面引入LayUI框架簡化開發(fā)。程序代碼注冊Controller-控制層
@PostMapping("/doRegister")
@ResponseBody
public
ReturnJson
doRegister(@RequestBody
User
user)
{
try
{
if
(userService.isUsernameExsit(user.getUsername()))
{
return
new
ReturnJson(2,
"用戶已存在!",
0,
"");
}
if
("男".equals(user.getGender()))
{
user.setAvatar("http://my.image.bed/avatar-boy.png");
}
if
("女".equals(user.getGender()))
{
user.setAvatar("http://my.image.bed/avatar-girl.png");
}
userService.register(user);
return
new
ReturnJson(0,
"注冊成功",
0,
"");
}
catch
(Exception
e)
{
return
new
ReturnJson(1,
"注冊失敗",
0,
"");
}
}Service-業(yè)務(wù)層
@Override
public
void
register(User
user)
{
user.setPassword(PasswordUtil.bryptPwd(user.getPassword()));
userMapper.insert(user);
}
@Override
public
Boolean
isUsernameExsit(String
username)
{
return
userMapper.selectByUsername(username)
!=
null;
}Mapper-數(shù)據(jù)持久層
<select
id="selectByUsername"
resultType="com.zyl.User">
select
*
from
user
where
username
=
#{username}
</select>
<insert
id="insert"
useGeneratedKeys="true"
keyProperty="id>
insert
into
user(username,password,gender,avatar)
values
(#{username},#{password},#{gender},#{avatar})
</insert>前端JS(不包含靜態(tài)Html頁面)<script
src="/static/res/layui/layui.js"></script><script>layui.cache.page
=
'user';layui.config({
version:
"3.0.0"
,base:
'/static/res/mods/'}).extend({
fly:
'index'}).use('fly');layui.use(['form',
'jquery'],
function
()
{
var
form
=
layui.form;
var
$
=
layui.jquery;
form.verify({
username:
function
(value,
item)
{
var
Digital
=
/\d/;
var
Letters
=
/[a-zA-Z]/;
if
(!(Digital.test(value)
&&
!Letters.test(value)
&&
value.length
==
11))
{
return
'學(xué)號只能為11位數(shù)字!';
}
},
nickname:
function
(value)
{
if
(value.length
<
2)
{
return
"昵稱至少輸入2個字符!";
}
},
pwd:
function
(value,
item)
{
var
Digital
=
/\d/;
var
Letters
=
/[a-zA-Z]/;
if
(!(Digital.test(value)
&&
Letters.test(value)
&&
value.length
>=
0))
{
return
'密碼必須含有字母和數(shù)字!';
}
},
rePwd:
function
(value,
item)
{
var
pwd
=
$("input[name='password']").val();
if
(pwd
!=
value)
{
return
'密碼與確認(rèn)密碼不一致!';
}
}
});
//監(jiān)聽提交
form.on('submit(reg)',
function
(data)
{
$.ajax({
url:
'/doRegister'
,
type:
'post'
,
contentType:
"application/json"
,
data:
JSON.stringify(data.field)
,
success:
function
(result)
{
if
(result.code
==
0)
{
layer.msg('注冊成功',
{
time:
2000,
end:
function
()
{
location.href
=
'/login'
}
});
}
else
{
layer.msg(result.msg,
{
time:
1000
});
parent.layer.close();
}
}
});
return
false;
});
$(".oauth
.layui-icon-home").click(function
()
{
window.location.href
=
"/index"
});});</script></body></html>登錄Controller-控制層
@PostMapping("/doLogin")
@ResponseBody
public
ReturnJson
doLogin(HttpServletRequest
request,
@RequestBody
User
user)
{
User
newUser
=
userService.loginCheck(user);
if
(newUser
!=
null)
{
request.getSession().setAttribute("user",
newUser);
if
("管理員".equals(newUser.getType()))
{
request.getSession().setAttribute("adminUser",
newUser);
}
request.getSession().setMaxInactiveInterval(1800);
return
new
ReturnJson(0,
"登錄成功",
0,
"");
}
else
{
return
new
ReturnJson(1,
"用戶名或密碼錯誤",
0,
"");
}
}Service-服務(wù)層
@Override
public
User
loginCheck(User
user)
{
User
tmpUser
=
userMapper.selectByUsername(user.getUsername());
boolean
isLogin
=
PasswordUtil.validPwd(user.getPassword(),
tmpUser.getPassword());
if
(isLogin)
{
return
tmpUser;
}
else
{
return
null;
}
}Mapper-數(shù)據(jù)持久層
<select
id="selectByUsername"
resultType="com.zyl.User">
select
*
from
user
where
username
=
#{username}
</select>前端JS(不包含靜態(tài)Html頁面)<script
src="/static/res/layui/layui.js"></script><script>
layui.config({
version:
"3.0.0"
,
base:
'/static/res/mods/'
}).extend({
fly:
'index'
}).use('fly');
layui.use(['form',
'jquery'],
function
()
{
var
form
=
layui.form;
var
$
=
layui.jquery;
//監(jiān)聽提交
form.on('submit(login)',
function
(data)
{
$.ajax({
url:
'/doLogin'
,
type:
'post'
,
contentType:
"application/json"
,
data:
JSON.stringify(data.field)
,
success:
function
(result)
{
if
(result.msg
==
'登錄成功')
{
layer.msg('登錄成功',
{
time:
2000,
end:
function
()
{
location.href
=
'/index'
}
});
}
else
{
layer.msg(result.msg,
{
time:
1000
});
var
index
=
parent.layer.getFrameIndex();
parent.layer.close();
}
}
});
return
false;
});
});</script></body></html>密碼加密工具類publicclassPasswordUtil{
/**加密密碼*/
publicstaticStringbryptPwd(Stringpwd){
returnBCrypt.hashpw(pwd,BCrypt.gensalt());
}
/**校驗密碼*/
publicstaticbooleanvalidPwd(Stringpwd,Stringhashed){
try{
returnBCrypt.checkpw(pwd,hashed);
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}}運行截圖注冊頁登錄頁實驗心得通過此次課外實踐,讓我意識到信息安全的重要性,此次實驗所設(shè)計的注冊、登錄程序是基于文本口令實現(xiàn)身份認(rèn)證的,基于口令的認(rèn)證方式是較常用的一種技術(shù)。在最初階段,用戶首先在系統(tǒng)中注冊自己的用戶名和登錄口令,系統(tǒng)將用戶名和口令存儲在內(nèi)部數(shù)據(jù)庫中,這個口令一般是長期有效的,因此也稱為靜態(tài)口令?;陟o態(tài)口令的身份認(rèn)證技術(shù)因其簡單和低成本而得到了廣泛的使用。但這種方式存在嚴(yán)重的安全問題,安全性僅依賴于口令,口令一旦泄露,用戶就可能被假冒。簡單的口令很容易遭受到字典攻擊、窮舉攻擊甚至暴力計算破解。另外,這種不科
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)貨黃金購買合同協(xié)議
- 電表生產(chǎn)銷售合同協(xié)議
- 電瓶車購車合同協(xié)議
- 田間道路整修合同協(xié)議
- 獅橋融資租賃合同協(xié)議
- 電工學(xué)徒工合同協(xié)議模板
- 電商淘寶平臺合同協(xié)議
- 玻璃臺面采購合同協(xié)議
- 甲醇燃料供貨合同協(xié)議
- 電廠爐渣回收合同協(xié)議
- 研究生學(xué)位論文修改情況登記表
- 施工進度計劃網(wǎng)絡(luò)圖-練習(xí)題知識講解
- 防孤島測試報告
- 按摩常用英語
- 食品公司規(guī)章制度
- midas NFX使用指南(八)
- 成都高新區(qū)小學(xué)數(shù)學(xué)五年級下冊半期考試數(shù)學(xué)試卷
- 2018年人教版九年級英語單詞表
- 危險性較大分部分項工程及施工現(xiàn)場易發(fā)生重大事故的部位環(huán)節(jié)的預(yù)防監(jiān)控措施和應(yīng)急預(yù)案11匯編
- 蘋果中國授權(quán)經(jīng)銷商協(xié)議
- 昆山市工業(yè)用地項目監(jiān)管協(xié)議-蘇州市國有建設(shè)用地使用權(quán)網(wǎng)上出讓系統(tǒng)
評論
0/150
提交評論