国产探花免费观看_亚洲丰满少妇自慰呻吟_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()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定南县| 确山县| 太湖县| 察雅县| 英德市| 广灵县| 枞阳县| 黄冈市| 公安县| 双柏县| 耒阳市| 马山县| 屏东县| 和平区| 辽中县| 吉首市| 大庆市| 沙湾县| 福泉市| 崇义县| 阿拉善右旗| 南涧| 阆中市| 泗阳县| 福贡县| 北安市| 杭州市| 抚顺县| 澳门| 双鸭山市| 巨鹿县| 柏乡县| 郓城县| 腾冲县| 越西县| 湖口县| 临澧县| 舟曲县| 仙居县| 锡林浩特市| 永胜县|