- 热门文章:
- · 使用ASP.NET中的一点体会--关于代码分离
- · 为ASP.NET封装的SQL数据库访问类
- · 《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换
- · Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法
- · ASP.NET中上传文件到数据库
- · 桌面上的图标文字改成透明
- · 将复合控件子控件事件上传到顶层的例子将复合控件子控件事件上传到顶层的例子
- · 为ASP.NET封装的SQL数据库访问类
- · Asp.Net页面输出到EXCEL
- · ASP.NET缓存:方法和最佳实践
- · 通过ASP.net程序创建域帐户故障
- · asp.net常用函数
上一篇:Asp.net中创建和使用Ado.net(一) >>
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()
下一篇:使用ASP.NET中的一点体会--关于代码分离 >>
相关文章:
- · asp.net(vb.net)连接sql server 2000数据库的连接模块(module)
- · ASP.net生成文字图片
- · 不该错的问题:IsPostBack in ASP.NET, Programming with DataGrid
- · ASP.NET提供文件下载函数
- · [ASP.NET]制作一个简单的多页Tab功能
- · 从零开始学ASP.NET
- · 在ASP.NET程序中发送邮
- · asp.net中动态变更CSS
- · asp.net 2.0中TREEVIEW中动态增加结点
- · 实现.net程序的错误回报机制
- · ASP.NET中使用自定义验证控件
- · 三层结构ASP.NET程序中,把实体类自动显示在页面上的例子(c#)
- · 动态加载Asp.net分页控件
- · ASP.Net Error Pocessing method
- · 正则表达式Replace
- · 正则表达式
- · 探讨一下分布式结构在网络应用中的种种好处
- · ASP.NET 2.0中隐藏listbox的某一项
- · ASP.NET下的Page Controller以及Template Method
- · ASP.NET 2.0中隐藏listbox的某一项
- · NET中打印包含有格式的 RichTextBox 的内容
- · 创建ASP.NET WEB自定义控件——例程1
- · 创建ASP.NET WEB自定义控件——例程1
- · VB6如何让程序只能启动一个实例
- · VB6如何让程序只能启动一个实例
- · 在ASP.NET中动态修改文件下载
- · 在asp.net中使用SQLSERVER的高级用法
- · ASP.NET心得笔记
- · [ASP.NET]如何在客户端调用服务端代码
- · ASP.NET POST方式提交数据
- · ASP.NET GET 方式提交数据!
- · ASP.NET的include的用法
- · asp。net关于三层连接数据库
- · .NET中的设计模式四:命令模式
- · VS.NET安装指南(To菜鸟)
- · .net中实现运行时从字符串动态创建对象
- · [ASP.NET]按键跳转以及按Enter以不同参数提交,及其他感应事件
- · [ASP.NET]一个实用的弹出窗口函数
