一、橫向越權和縱向越權
越權定義:乙個正常的使用者a通常只能夠對自己的一些資訊進行增刪改查,但是由於程式設計師的一時疏忽未對資訊進行增刪改查的時候沒有進行乙個判斷,判斷所需要操作的資訊是否屬於對應的使用者,可以導致使用者a可以操作其他人的資訊。
橫向越權定義:攻擊者嘗試訪問與他擁有相同許可權的使用者的資源。web應用程式接收到使用者請求,修改某條資料時,沒有判斷資料的所屬人,或者在判斷資料所屬人時從使用者提交的表單引數中獲取了userid。導致攻擊者可以自行修改userid修改不屬於自己的資料。所有的更新語句操作,都可能產生這個漏洞。
縱向越權定義:低級別攻擊者嘗試訪問高階別使用者的資源。由於web應用沒有做許可權控制,或僅僅在選單上做了許可權控制,導致惡意使用者只要猜測其他管理頁面的url,就可以訪問或控制其他角色擁有的資料或頁面,達到許可權提公升的目的。
二、縱向越權問題的解決方案
建議使用基於角色訪問控制機制來防止縱向越權攻擊,即預先定義不同的許可權角色,為每個角色分配不同的許可權,每個使用者都屬於特定的角色,即擁有固定的許可權,當使用者執行某個動作或產生某種行為時,通過使用者所在的角色判定該動作或者行為是否允許。
三、橫向越權問題的解決方案
橫向越權可能出現的場景有:
一、在使用者忘記密碼重置密碼時,回答對了問題進入密碼重置階段時,如果知道其他使用者的使用者名稱,很容易改變此使用者的密碼,然後就可以進行越權訪問了。
這種情況下為了防止橫向越權,我們可以使用快取來進行輔助,當問題回答正確時,我們在快取中儲存一對由使用者名稱和乙個唯一的數字組成的資料,然後返回放入的唯一資料。在重置密碼時我們的引數不僅需要使用者名稱和密碼還需要前面生成的唯一數字,根據使用者名稱在快取中取出對應的數字,如果取出的數字和引數中傳入的相等,則證明重置的當前使用者的密碼,否則不是,且不予以重置,並且快取中的唯一資料是有時間限制的,這樣可以進一步提高安全性。
重置密碼回答問題
public serverresponse
checkanswer
(string username, string question, string answer)
return serverresponse.
createbyerror
("使用者答案錯誤");
}
重置密碼
public serverresponse
forgetresetpassword
(string username, string passwordnew, string forgettoken)
serverresponse validresponse =
this
.checkvalid
(username, const.username);if
(validresponse.
issuccess()
)//使用cache而不使用session是因為當應用程式結束時,如果快取的失效時間未到,則下次啟動程式時,快取資料依然存在
//但是seesion中的資料只儲存在一次會話中,session容易丟失不夠安全,而cache不會出現這種問題
string token = tokencache.
getkey
(tokencache.token_prefix+username);if
(stringutils.
isblank
(token))if
(stringutils.
equals
(token, forgettoken))}
else
return serverresponse.
createbyerror
("密碼更新失敗");
}
二、當普通使用者登入後,在刪除送貨位址時,使用者便可使用刪除位址的介面,將其他使用者的位址刪除。
這種情況下為了防止橫向越權,我們不能簡簡單單的只是根據位址的主鍵就刪除位址,而是應該在編寫乙個根據位址主鍵和使用者主鍵一起刪除位址的sql。
橫向越權 縱向越權問題解決
橫向越權 橫向越權指的是攻擊者嘗試訪問與他擁有相同許可權的使用者的資源 縱向越權 縱向越權指的是乙個低級別攻擊者嘗試訪問高階別使用者的資源 對於縱向越權,我們可以通過設定使用者角色,為不同的角色提供不同的許可權來避免。對於橫向越權,就比較麻煩了,橫向越權可能出現的場景有 在使用者忘記密碼重置密碼時,...
橫向越權 縱向越權問題解決
橫向越權 橫向越權指的是攻擊者嘗試訪問與他擁有相同許可權的使用者的資源 縱向越權 縱向越權指的是乙個低級別攻擊者嘗試訪問高階別使用者的資源 對於縱向越權,我們可以通過設定使用者角色,為不同的角色提供不同的許可權來避免。對於橫向越權,就比較麻煩了,橫向越權可能出現的場景有 在使用者忘記密碼重置密碼時,...
mysql 解決方案 Mysql解決方案
mysql解決方案 一 centos7安裝mysql5.7 wget rpm uvh mysql80 community release el7 3.noarch.rpm yum repolist all grep mysql 發現預設mysql8.0是預設安裝的,然而我們要安裝的是mysql5.7...