Overview
如果沒有適當?shù)?access control,就會執(zhí)行一個包含用戶控制主鍵的 SQL 指令,從而允許攻擊者訪問未經(jīng)授權的記錄。
Details
Database access control 錯誤在以下情況下發(fā)生: 1. 數(shù)據(jù)從一個不可信賴的數(shù)據(jù)源進入程序。 2. 這個數(shù)據(jù)用來指定 SQL 查詢中主鍵的值。 在這種情況下,在 cancel.php 中第 64 行的 mysql_query() 使用該數(shù)據(jù)。
例 1:以下代碼用到一個參數(shù)化指令,這個指令轉義了元字符,以防止 SQL injection 漏洞,并構建和執(zhí)行一個 SQL 查詢。該 SQL 查詢指令可以搜索與指定標識符 [1] 相匹配的清單。您可以從與當前被授權用戶有關的所有清單中選擇這些標識符。 ... $id = $_POST['id']; $query = "SELECT * FROM invoices WHERE id = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('ss',$id); $stmt->execute(); ... 問題在于開發(fā)者沒有考慮到所有可能出現(xiàn)的 id 值。雖然界面生成了屬于當前用戶的清單標識符列表,但是攻擊者可以繞過這個界面,從而獲取所需的任何清單。由于此示例中的代碼沒有執(zhí)行檢查以確保用戶具有訪問所請求清單的權限,因此它會顯示任何清單,即使此清單不屬于當前用戶。 許多現(xiàn)代 Web 框架都會提供對用戶輸入執(zhí)行驗證的機制(包括 Struts 和 Struts 2)。為了突出顯示未經(jīng)驗證的輸入源,F(xiàn)ortify 安全編碼規(guī)則包會對 Fortify Static Code Analyzer(Fortify 靜態(tài)代碼分析器)報告的問題動態(tài)重新調整優(yōu)先級,即在采用框架驗證機制時降低這些問題被利用的幾率并提供指向相應證據(jù)的指針。我們將這種功能稱之為上下文敏感排序。為了進一步幫助 Fortify 用戶執(zhí)行審計過程,F(xiàn)ortify 軟件安全研究團隊開發(fā)了 Data Validation(數(shù)據(jù)驗證)項目模板,該模板根據(jù)應用于輸入源的驗證機制按文件夾對問題進行了分組。
Recommendations
與其靠表示層來限制用戶輸入的值,還不如在應用程序和數(shù)據(jù)庫層上進行 access control。任何情況下都不允許用戶在沒有取得相應權限的情況下獲取或修改數(shù)據(jù)庫中的記錄。每個涉及數(shù)據(jù)庫的查詢都必須遵守這個原則,這可以通過把當前被授權的用戶名作為查詢語句的一部分來實現(xiàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-796741.html
示例 2:以下代碼實現(xiàn)的功能與Example 1 相同,但是附加了一個限制,以驗證清單是否屬于當前經(jīng)過身份驗證的用戶。 ... $mysqli = new mysqli($host,$dbuser, $dbpass, $db); $userName = getAuthenticated($_SESSION['userName']); $id = $_POST['id']; $query = "SELECT * FROM invoices WHERE id = ? AND user = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('ss',$id,$userName); $stmt->execute(); ...文章來源地址http://www.zghlxwxcb.cn/news/detail-796741.html
到了這里,關于開發(fā)安全之:Database access control的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!