iT邦幫忙

0

請問Fortify的Access control: database

  • 分享至 

  • xImage

第一次發貼請教一下,Fortify掃到以下程式碼「cmd.Parameters.AddWithValue("@keyword", "%" + keyword.Text + "%");」那一行有Access Control:Database的風險,我看這風險是讓使用者查看未經授權的資料,只是下面已經有用「User_No」險制權限內的資料才能查到,而且另一個查詢條件卻沒有掃到風險!?
第二段程式碼的「cmdupd.Parameters.AddWithValue("@licence", licence.Text.ToString());//有風險」也是一樣,似乎前端是input的才會有風險...
請問這種應該怎麼調整避免這風險?
謝謝

if (build.SelectedValue != "" && build.SelectedValue != "-1")
{
	cmd.Parameters.AddWithValue("@build", build.SelectedValue);//無風險
	strWhere += " and build_id = @build";
}
if (keyword.Text != "")
{
	cmd.Parameters.AddWithValue("@keyword", "%" + keyword.Text + "%");//有風險
	strWhere += " and build_license like @keyword";
}

cmd.Parameters.AddWithValue("@User_No", Session["User_No"].ToString());
cmd.CommandText = string.Format(@"
select build_licence
	,dt
	,build_id
from build c (nolock)
where 1=1
	and exists (select * from Permission p where c.Su_No = p.Su_No and p.user_no = @user_no)
	{0}", strWhere);
SqlCommand cmdupd = new SqlCommand();
cmdupd.Parameters.AddWithValue("@licence", licence.Text.ToString());//有風險
cmdupd.Parameters.AddWithValue("@corp", corp.SelectedValue.ToString());//無風險
froce iT邦大師 1 級 ‧ 2024-03-18 12:47:58 檢舉
C#不熟,不過看起來都是因為用網頁輸入+字串拼接當參數導致的。
conan419 iT邦新手 5 級 ‧ 2024-03-18 23:19:54 檢舉
謝謝回覆,因為必需依使用者輸入的條件過濾,使用Parameters傳參數避免injection風險,但被認為有Access control: database><
canrong iT邦新手 2 級 ‧ 2024-05-30 12:01:04 檢舉
有時候,將一些敏感詞改名,可以解決。例如:password、pwd等等皆會被判斷為弱點。有可能你的一些命名被判斷為敏感詞。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
念戀
iT邦新手 4 級 ‧ 2024-03-18 14:23:35

每個字串 .Trim()
licence.Text.ToString().Trim()

conan419 iT邦新手 5 級 ‧ 2024-03-18 23:13:29 檢舉

謝謝回答,我試過licence.Text.ToString().Trim()後再掃,但依然被視為風險><
但是我看別人寫的,的確很多人寫的是「licence.Text.ToString().Trim()」,或許也是為了改這項風險,但可能版本不同吧(我猜),我Fortify版本是22.2.1

0
txstudio
iT邦新手 4 級 ‧ 2024-03-18 14:28:46

Fortify 是看 Source code 的,在你的 case 裡面它只要認出來 DbParameter 的 Value 是 User 直接輸入後代入 (ex: TextBox) 的就會給你風險標籤

就算有正確使用參數化查詢,系統掃描後符合外部輸入後直接帶入 DbParameter 還是會給你警告

conan419 iT邦新手 5 級 ‧ 2024-03-18 23:15:12 檢舉

謝謝回答,只是需要由使用者輸入過濾查詢,但又必需沒有風險><

txstudio iT邦新手 4 級 ‧ 2024-03-19 18:54:20 檢舉

就要看你們是否可以忽略這種案例,程式碼是沒有問題
這種確實是被掃描出來

froce iT邦大師 1 級 ‧ 2024-03-20 10:28:07 檢舉

確定是因為使用者輸入的話,C#應該有像python的 bleach這類的套件庫來限制使用者輸入。
或是使用escape去跳脫。

https://github.com/mozilla/bleach

我要發表回答

立即登入回答