日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何使用Shiro防止數(shù)據(jù)庫驗證碼攻擊?(shiro數(shù)據(jù)庫驗證碼)

Shiro 是一個強大的 Java 安全框架,旨在為 Java 應(yīng)用程序提供身份驗證、授權(quán)、加密和會話管理等安全功能。該框架的一個特別功能是可以防止數(shù)據(jù)庫驗證碼攻擊。本文將深入探討 Shiro 是如何做到這一點的,并提供一些使用技巧。

開州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

介紹數(shù)據(jù)庫驗證碼攻擊

數(shù)據(jù)庫驗證碼攻擊是指攻擊者通過不斷嘗試賬戶密碼登錄應(yīng)用程序,以達到竊取敏感信息或者攻擊程序的目的。這種攻擊方法非常常見,尤其是針對使用簡單字符或數(shù)字作為驗證碼的應(yīng)用程序。

攻擊者使用一個特別的腳本或者工具,在一定時間內(nèi),不斷向應(yīng)用程序提交多組用戶名和密碼,通過代碼自動解析驗證碼,不斷重試直至成功登錄。由于這種攻擊方法非常高效,可以在極短時間內(nèi)完成對某個賬戶的大量登錄嘗試,因此也被稱為暴力破解攻擊。

通過分析相關(guān)數(shù)據(jù),研究人員發(fā)現(xiàn),大多數(shù)數(shù)據(jù)庫驗證碼攻擊都是由自動化程序攻擊發(fā)起的。這些程序可以很容易地遍歷整個網(wǎng)絡(luò),自動尋找目標(biāo)并下發(fā)攻擊指令。因此,目前很多應(yīng)用程序都采用了驗證碼的方法來阻止自動化程序的攻擊。

使用 Shiro 防止數(shù)據(jù)庫驗證碼攻擊

Shiro 提供了很多防止驗證碼攻擊的方法。其中最常用的是限制登錄嘗試次數(shù),當(dāng)?shù)卿浺允〗Y(jié)束時,可以定期增加一個計數(shù)器,并且每次登錄失敗記錄上登錄時間。如果登錄失敗的次數(shù)超過了設(shè)定的閥值,則會直接拒絕當(dāng)前嘗試的登錄請求。

Shiro 還提供了一種針對多因素身份驗證的防護機制,通過添加短信驗證或特殊的硬件令牌來保護用戶賬戶。這種方式要比傳統(tǒng)的密碼、PIN 碼等方式更加安全,因為攻擊者必須同時掌握用戶賬戶、密碼和身份驗證設(shè)備等多個信息才能夠成功進入賬戶。

除了上述方法,Shiro 還提供了其他一些有效的防護措施,比如增加驗證碼的復(fù)雜度,使用高級的圖片識別技術(shù)進行多種驗證碼識別,以及利用和大數(shù)據(jù)分析技術(shù)來分析登錄行為數(shù)據(jù),建立用戶登錄行為模型和異常檢測算法等等。

Shiro 還提供了一套靈活的角色和權(quán)限管理機制,這樣我們可以根據(jù)用戶的角色和權(quán)限,對不同的用戶進行不同的授權(quán)和限制,從而達到更好的安全管理目的。

使用 Shiro 防止數(shù)據(jù)庫驗證碼攻擊是一種有效的方法,它能夠極大地降低系統(tǒng)被攻擊的風(fēng)險。但同時也需要我們在實際應(yīng)用中仔細(xì)地規(guī)劃和部署相應(yīng)的安全策略和機制,加強用戶的安全意識,并時刻保持警覺,防止信息泄露及身份被盜用等情況的發(fā)生。

相關(guān)問題拓展閱讀:

  • shiro權(quán)限框架如何切換數(shù)據(jù)源(多個數(shù)據(jù)庫)
  • Shiro的 rememberMe 功能使用指導(dǎo)為什么rememberMe設(shè)置了沒作用

shiro權(quán)限框架如何切換數(shù)據(jù)源(多個數(shù)據(jù)庫)

根據(jù)Shiro的設(shè)計思路,用戶與角色之前的關(guān)系為多對多,角色與權(quán)限之間的關(guān)系也是多對多。在數(shù)據(jù)庫中需要因此建立5張表,分別是用戶表(存儲用戶名,密碼,鹽等)、角色表(角色名稱,相關(guān)描述等)、權(quán)限表(權(quán)限名稱,相關(guān)描述等)、用戶-角色對應(yīng)中間表(以用戶ID和角色ID作為聯(lián)合主鍵)、角色-權(quán)限對應(yīng)中間表(以角色ID和權(quán)限ID作為聯(lián)合主鍵)。具體dao與service的實現(xiàn)本文不提供。

Shiro的 rememberMe 功能使用指導(dǎo)為什么rememberMe設(shè)置了沒作用

采用這個解決方案的前提是,你必須自己先實現(xiàn)一個realm,不過這個我相信大家都會實現(xiàn)的,畢竟默認(rèn)的不是jdbcRealm ,真正的項目都是要查數(shù)據(jù)庫才能確定用戶是否登錄的。那么我就假定大家的項目中都有那么一個負(fù)責(zé)驗證登錄的 JdbcRealm, 并且是采用用戶名密碼認(rèn)證的,在 doGetAuthenticationInfo 方法里面是采用如下的方轎枯穗法來做認(rèn)證

info = new SimpleAuthenticationInfo(username, password.toCharArray(), getName());

這個前提條件保證你的閉卜principal是username,相信大部分人根據(jù)教程做shiro的時候都采用了這種方式

STEP1 復(fù)寫 FormAuthenticationFilter 的 isAccessAllowed 方法敗枯

做一個新類繼承FormAuthenticationFilter ,并復(fù)寫 isAccessAllowed 方法

package com.yqr.jxc.shiro;

import javax.annotation.Resource;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import org.apache.shiro.session.Session;

import org.apache.shiro.subject.Subject;

import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;

import com.yqr.jxc.service.global.GlobalUserService;

public class RememberAuthenticationFilter extends FormAuthenticationFilter {

@Resource(name=”globalUserService”)

private GlobalUserService globalUserService;

/**

* 這個方法決定了是否能讓用戶登錄

*/

@Override

protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {

Subject subject = getSubject(request, response);

//如果 isAuthenticated 為 false 證明不是登錄過的,同時 isRememberd 為true 證明是沒登陸直接通過記住我功能進來的

if(!subject.isAuthenticated() && subject.isRemembered()){

//獲取session看看是不是空的

Session session = subject.getSession(true);

//隨便拿session的一個屬性來看session當(dāng)前是否是空的,我用userId,你們的項目可以自行發(fā)揮

if(session.getAttribute(“userId”) == null){

//如果是空的才初始化,否則每次都要初始化,項目得慢死

//這邊根據(jù)前面的前提假設(shè),拿到的是username

String username = subject.getPrincipal().toString();

//在這個方法里面做初始化用戶上下文的事情,比如通過查詢數(shù)據(jù)庫來設(shè)置session值,你們自己發(fā)揮

globalUserService.initUserContext(username, subject);

}

}

//這個方法本來只返回 subject.isAuthenticated() 現(xiàn)在我們加上 subject.isRemembered() 讓它同時也兼容remember這種情況

return subject.isAuthenticated() || subject.isRemembered();

}

}

STEP2 設(shè)置使用這個新的 AuthenticationFilter (認(rèn)證過濾器)

如果你用的是spring那么

/** = rememberAuthFilter

如果你用的是 ini 文件,那么

rememberAuthFilter=com.yqr.jxc.shiro.RememberAuthenticationFilter

#將之前的 /** = authc 替換成 rememberAuthFilter

/** = rememberAuthFilter

然后重啟項目我們來測試一下,先登錄一次系統(tǒng),然后直接關(guān)掉瀏覽器,然后打開瀏覽器直接輸入系統(tǒng)某個頁面的地址,發(fā)現(xiàn)可以直接進去了,session什么的也設(shè)置好了

官方清缺的文檔有說明,isRemembered和isAuthenticated是互斥的

isRemembered是在服務(wù)器上記錄一個cookie說明你這個用戶登陸過并答塌辯且被記住了

效果類似于亞馬遜頁面上,他會記衫孝住近期登陸過的用戶(Subject)

但是你進行敏感操作的時候還是要重新登錄敲賬號密碼的,也就是必須重新進行Authentication

也就是說如果你的攔截器配置了authc或者其他需要認(rèn)證之后才能使用的

shiro的rememberMe功能就不起作用了

印象中有一個url攔截器可以過濾這個,不記得名字了

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


網(wǎng)站名稱:如何使用Shiro防止數(shù)據(jù)庫驗證碼攻擊?(shiro數(shù)據(jù)庫驗證碼)
瀏覽路徑:http://www.5511xx.com/article/cddeegj.html