MSSQL注入绕过之路:怎样防范?(mssql 注入绕过)
MSSQL注入绕过之路:怎样防范?
互联网应用开发几乎必定都会涉及到数据库技术,MSSQL是一类常见的关系数据库管理系统。若程序存在未过滤的输入和使用不安全的存储过程,就易受注入攻击。而MSSQL注入攻击无疑是其中最严重的一种,能够对数据库中的数据进行直接更改,使数据库可能被恶意篡改,直接造成经济损失和信息安全损害。那么,MSSQL注入绕过之路:怎样防范?
一、利用参数化查询
首先,建议开发者在编写MSSQL数据库操作代码的时候,尽量利用参数化查询的形式进行开发。参数化查询不再像传统的字符串拼接查询语句一样,直接将用户提供的输入字符串作为查询语句的一部分,而是将输入字符串替换为参数,然后把这些参数传给数据库,由数据库本身判断参数是否合法。例如:
String sql=”select * from table where name=@name and password=@password”;
MySqlCommand cmd=new MySqlCommand(sql,conn);
cmd.Parameters.AddWithValue(“@name”,userName);
cmd.Parameters.AddWithValue(“@password”,userPassword);
这种方法对于用户输入具有高度的安全性,而且相对于字符串拼接法,可以大幅度减少代码的量。
二、存储过程安全
数据库中存储过程是一种服务器端的程序函数,其特点是输入性的,通常被称为存储过程参数,这就要求开发者在创建存储过程时,必须对输入参数进行穷举和全面设计,特别是对特殊字符串进行过滤等,避免存储过程被恶意利用。例如:
CREATE PROCEDURE usp_select@name nvarchar(50),@password nvarchar(50)AS
BEGIN
SELECT * FROM table WHERE name=@name;
END
GO
其中,一定要注意参数名及其长度以及变量类型等要保持一致,尽可能避免被恶意篡改。
三、限制权限
除了在代码中对特殊字符进行过滤外,对数据库的用户同样可以赋予其最低的权限,这样可以减少数据库中的攻击面,防止进程被恶意调用或利用。另外,应用程序安全测试时,可以采取某些安全措施:如:构建安全墙以及按应用程序划分安全策略等。
总之,要确保MSSQL安全,就得知道该怎样来防范,要避免MSSQL被恶意的注入绕过,就得先从参数化查询、储存过程安全和限制权限等三个方面入手。