越權定義:一個正常的用戶A一般只可以對本身的一些信息進行增刪改查,可是因爲程序員的一時疏忽未對信息進行增刪改查的時候沒有進行一個判斷,判斷所須要操做的信息是否屬於對應的用戶,能夠致使用戶A能夠操做其餘人的信息。程序員
橫向越權定義:攻擊者嘗試訪問與他擁有相同權限的用戶的資源。Web應用程序接收到用戶請求,修改某條數據時,沒有判斷數據的所屬人,或者在判斷數據所屬人時從用戶提交的表單參數中獲取了userid。致使攻擊者能夠自行修改userid修改不屬於本身的數據。全部的更新語句操做,均可能產生這個漏洞。數據庫
縱向越權定義:低級別攻擊者嘗試訪問高級別用戶的資源。因爲Web應用沒有作權限控制,或僅僅在菜單上作了權限控制,致使惡意用戶只要猜想其餘管理頁面的URL,就能夠訪問或控制其餘角色擁有的數據或頁面,達到權限提高的目的。cookie
越權解釋與cookie解決辦法:http://blog.csdn.net/tanzhen1991910/article/details/53220593
session
重置密碼:app
1 public ServerResponse<String> resetPassword(String passwordOld, String passwordNew, User user) { 2 //防止橫向越權,要校驗一下這個用戶的舊密碼,必定要指定是這個用戶,由於咱們會查詢一個count(1),若是不指定id,那麼結果就是true即count>0 3 //其實也就是要舊密碼和用戶名要匹配 4 int resultCount = userMapper.checkPassword(MD5Util.MD5EncodeUtf8(passwordOld), user.getId()); 5 if(resultCount == 0) { 6 return ServerResponse.createByErrorMessage("舊密碼錯誤"); 7 } 8 //將新密碼md5加密後更新到數據庫中 9 user.setPassword(MD5Util.MD5EncodeUtf8(passwordNew)); 10 //其實這裏也是能夠直接調用跟上面同樣的updatePasswordByUsername函數進行更新的 11 int updateCount = userMapper.updateByPrimaryKeySelective(user); 12 if(updateCount > 0) { 13 return ServerResponse.createBySuccessMessage("密碼更新成功"); 14 } 15 return ServerResponse.createByErrorMessage("密碼更新失敗"); 16 }
1 public ServerResponse<String> del(Integer userId, Integer shippingId) { 2 //防止橫向越權,若是這裏不加userId,就有可能出現:普通用戶登陸以後,傳一個不是本身的shippingId,而卻能夠更改數據庫的狀況 3 //因此這裏要加上userId來進行匹配,避免橫向越權問題 4 int resultCount = shippingMapper.deleteByShippingIdUserId(userId, shippingId); 5 if(resultCount > 0) { 6 return ServerResponse.createBySuccess("刪除地址成功"); 7 } 8 return ServerResponse.createByErrorMessage("刪除地址失敗"); 9 }
1 public ServerResponse update(Integer userId, Shipping shipping) { 2 //防止橫向越權問題,這裏要從登陸的session信息中獲取userId 3 shipping.setUserId(userId); 4 int rowCount = shippingMapper.updateByShipping(shipping); 5 if(rowCount > 0) { 6 return ServerResponse.createBySuccess("更新地址成功"); 7 } 8 return ServerResponse.createByErrorMessage("更新地址失敗"); 9 }