关于SQL注入
概念:
SQL注入攻击是通过提供一个正常使用者想不到的输入方式,将SQL命令插入到用户登陆、存储字符串、输入URL或者SQL命令中,欺骗了服务器,达到了执行恶意SQL命令的目的,最终使攻击者可以完全控制应用程序后面的数据库服务器,SQL注入意味着数据库中所有数据都能被攻击者盗取。
危害:
SQL注入后会影响使用SQL数据库的任何网站或Web应用程序,攻击者可以利用SQL注入漏洞绕过应用程序安全措施、应用程序的身份验证和授权,可以非法访问、修改、删除用户的敏感信息数据:个人隐私,商业机密,知识产权等等。
类型:
SQL注入式攻击有直接和间接注入式攻击。直接注入式是将代码与SQL命令串联在一起,等待执行的用户输入变量,比如一种情况在登陆时第三个输入框中输入“ or 1=(SELECT@@version) –”点击登录后,通过错误显示了服务器的操作系统和SQL Server版本信息,甚至可以轻易获取数据库所有的字段名等信息;间接注入式攻击法是将恶意代码注入到需要存储的字符串中,在字符串存储时连接到一个动态的SQL命令,此时携带的恶意代码将被执行。
措施:
时刻警惕用户输入的内容;避免将用户提供的输入直接放入SQL语句中;不将敏感数据保留在纯文本中;对存储数据库中的私有和机密数据进行加密;限制数据库权限,将数据库用户设置为最低权限;加强验证的方式;不直接向用户显示数据库错误;对访问和使用数据库的应用程序设置防火墙等等。
关于LINQ
特点:
LINQ以熟悉的语言来编写代码,LINQ编写所需要的代码量减小,LINQ代码的可读性较好,可以使用相同的LINQ语法查询多个数据源,LINQ程序在编译的时候会提供类型检查,LINQ为通用集合提供智能感知提示,LINQ可以检索不同形状的数据,LINQ增加了用任何类型的数据进行查询和更新数据的标准模式。
LINQ 如何解决数据库相关的安全性问题?
LINQ在执行的每次查询中都加上了具体参数,清除了每次SQL注入存在的可能性。在每次SQL查询时,无论其源自何处,都将把查询的任何输入都当做字面值,且在编译时会进行语法检查,在编译时编译器可以捕捉到查询时的大量错误输入。在使用了LINQ to SQL后,WHERE会被自动加上参数,不管输入任何查询输入都会是安全的,它不会允许用户的输入执行服务器的命令,使传统的SQL注入攻击无法造成破坏。LINQ通过开发人员直接和对象模型交互而不是直接和数据库交互,消除了对数据库的SQL注入攻击的可能性。
代码实例
using System;
using System.Linq;namespace DuckTyping{
internal class Program {
private static void Main() {
int[] array = { 3, 8, 1, 9, 17 15 6};
// 选择按降序排序的数组中所有奇数的平方
var results = from x in array
where x % 2 == 1
orderby x descending
select x * x;
foreach (var result in results) {
Console.WriteLine(result);
}
}
}
}
使用LINQ之前:
protected void Page_Load(object sender, EventArgs e)
{
string connectionString =
ConfigurationTeather.ConnectionStrings
["northwndConnectionString1"].ConnectionString;
CustomersDataContext db = new
CustomersDataContext(connectionString);
GridView1.DataSource =
from student in db. Students
where student. Name ==
txtName.Text
orderby student.Name
select student;
GridView1.DataBind();
}
在使用LINQ TO SQL之后:
SELECT [t0].[StudentID], [t0].[Name],
[t0].[ContactName], [t0].[ContactTitle], [t0].[Address],
[t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country],
[t0].[Phone], [t0].[Fax]
FROM [dbo].[Students] AS [t0]
WHERE [t0].[Name] = @p0
ORDER BY [t0].[Name]}