簡體   English   中英

訪問控制:數據庫強化

[英]Access Control: Database Fortify

我們運行Fortify掃描並進行了一些訪問控制:數據庫問題。 代碼獲取文本框值並將其設置為字符串變量。 在這種情況下,它將值從TextBox傳遞到數據庫中的存儲過程。 關於如何解決此訪問控制:數據庫問題的任何想法?

如果沒有適當的訪問控制,DataBase.cs中的方法ExecuteNonQuery()可以在第320行執行包含攻擊者控制的主鍵的SQL語句,從而允許攻擊者訪問未經授權的記錄。

來源:Tool.ascx.cs:591 System.Web.UI.WebControls.TextBox.get_Text()

rptItem.FindControl("lblClmInvalidEntry").Visible = false;    
ToolDataAccess.UpdateToolData(strSDN, strSSNum, strRANC, strAdvRecDate, strAdvSubDate,  strClmRecDate, strClmAuth, strClmSubDate, strAdvAuth, txtNoteEntry.Text);

接收器:DataBase.cs:278


System.Data.SqlClient.SqlParameterCollection.Add()
// Add parameters
foreach (SqlParameter parameter in parameters)
cmd.Parameters.Add(parameter);

“訪問控制:數據庫”的要點是它在查詢中不夠具體,因此可能允許用戶查看他們不應該的信息。 這個漏洞的一個簡單示例是工資單數據庫,其中有一個文本框,其中顯示了員工的ID並給出了他們的工資,這可能允許用戶更改ID並查看其他員工的工資。 另一個通常用於功能的示例是在網站URL中,其中產品ID用於參數,這意味着用戶可以瀏覽您網站上的每個產品。 但由於這只允許用戶查看他們應該能夠獲得的信息,因此並不是特別安全問題。

例如:

"SELECT account_balance FROM accounts WHERE account_number = " + $input_from_attacker + ";"
// even if we safely build the query above, preventing change to the query structure,
// the attacker can still send someone else's account number, and read Grandma's balance!

由於這是基於上下文的,因此很難確定靜態,所以有很多例子可以讓Fortify抓住這個但它實際上是預期的功能。 這並不是說該工具已被破壞,這只是靜態分析的局限之一,並且取決於您的程序應該做什么,它可能是也可能不是。 如果這是為了這樣工作,那么我建議將其審核為不是問題或抑制問題。 如果您可以看到這肯定是一個問題,並且用戶可以看到他們不應該看到的信息,那么存儲過程需要更具體,以便用戶只能看到他們應該能夠獲得的信息。 但是,SCA可能仍然會在后一次掃描中選擇此項,因此您仍然需要將其審核為已修復且不再是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM