国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.net中進行安全的 ADO.NET 編碼(一)

2024-07-10 12:56:46
字體:
來源:轉載
供稿:網友
asp.net中進行安全的 ado.net 編碼(一)
保證應用程序的安全包括編寫安全的代碼。代碼必須只公開客戶端代碼所需要的信息和功能。與 ado.net 相關的常見攻擊是 sql insertion 攻擊,它從應用程序返回的異常中來確定私有數據庫信息。

危險性:
在 sql insertion 攻擊中,攻擊者在您的命令中插入在數據源位置執行處理的其他 sql 語句。這些命令不僅可以修改或破壞數據源位置的信息,還可以檢索您的私有信息。將命令字符串與外部輸入串聯在一起的代碼容易受到 sql insertion 攻擊。例如,以下代碼容易受到 sql insertion 攻擊。

[visual basic]

dim custid as string = getcustomerid()

dim selectstring as string = "select * from customers where customerid = " & custid

dim cmd as sqlcommand = new sqlcommand(selectstring, conn)
conn.open()
dim myreader as sqldatareader = cmd.executereader()
myreader.close()
conn.close()
攻擊者可為要查詢的 customerid 輸入一個值“1;drop table customers”。這會導致為此查詢執行以下命令。

select * from customers where customerid = 1;drop table customers
為了防止 sql insertion 攻擊,請驗證來自外部源的輸入,并傳遞列值作為參數,而不是串聯這些值來創建 sql 語句。

解決方法一:
 使用正則表達式
可以使用正則表達式驗證輸入與特定的格式是否匹配。.net framework 提供了 regex 對象,以根據正則表達式來驗證值。例如,以下代碼用于確保值為 5 個字符的字母字符串。

[visual basic]

public static function validate(instring as string) as boolean

dim r as regex = new regex("^[a-za-z0-9]{5}$")

return r.ismatch(instring)

end function

解決方法二:
使用參數
參數提供了一種有效的方法來組織隨 sql 語句傳遞的值,以及向存儲過程傳遞的值。另外,通過確保從外部源接收的值僅作為值傳遞,而不是作為 sql 語句的一部分傳遞,可以防止參數受到 sql insertion 攻擊。因此,在數據源處不會執行插入到值中的 sql 命令。相反,所傳遞的這些值僅僅被視為參數值。以下代碼顯示了使用參數傳遞值的一個示例。

[visual basic]

dim custid as string = getcustomerid()

dim selectstring as string = "select * from customers where customerid = @customerid"

dim cmd as sqlcommand = new sqlcommand(selectstring, conn)

cmd.parameters.add("@customerid", sqldbtype.varchar, 5).value = custid

conn.open()

dim myreader as sqldatareader = cmd.executereader()

myreader.close()

conn.close()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大名县| 琼海市| 乳源| 普宁市| 万全县| 瑞昌市| 孙吴县| 儋州市| 博客| 沂源县| 冷水江市| 鹤庆县| 饶阳县| 明溪县| 山阴县| 客服| 佛坪县| 广安市| 鹤山市| 博罗县| 阜平县| 吉安县| 广汉市| 灌南县| 建宁县| 甘洛县| 台中市| 收藏| 鄂伦春自治旗| 江津市| 龙门县| 仙游县| 沈阳市| 小金县| 东安县| 前郭尔| 凤阳县| 松溪县| 崇左市| 沙坪坝区| 密云县|