什么是 SQL Server 上的 SQL 注入攻击?我们如何预防它们? [复制]

Posted

技术标签:

【中文标题】什么是 SQL Server 上的 SQL 注入攻击?我们如何预防它们? [复制]【英文标题】:What are SQL injection attacks on SQL Server? How can we prevent them? [duplicate] 【发布时间】:2015-03-03 09:42:01 【问题描述】:

什么是 SQL Server 上的 SQL 注入攻击?我们如何防止这种情况发生?

【问题讨论】:

最好的办法就是用谷歌搜索。 【参考方案1】:

SQL 注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意 SQL 语句被插入到输入字段中执行(例如,将数据库内容转储给攻击者)。

http://en.wikipedia.org/wiki/SQL_injection

如何:防止 ASP.NET 中的 SQL 注入

https://msdn.microsoft.com/en-us/library/ff648339.aspx

https://msdn.microsoft.com/en-us/magazine/cc163917.aspx

以下是一些提示:

永远不要相信用户输入。

始终使用参数化存储过程。

始终对用户输入进行编码/解码。

不要编写内联查询。

始终在客户端验证用户输入的特殊字符 () 和 服务器端

https://msdn.microsoft.com/en-us/library/hh882339%28v=vs.110%29.aspx

http://www.asp.net/whitepapers/request-validation

【讨论】:

请将引号格式设置为引号,以便清楚地表明内容来自列出的来源。【参考方案2】:

在简单的语言中,SQLi 或 SQL 注入攻击是使应用程序将数据视为命令的攻击。例如,假设您有一个使用以下 SQL 语句的身份验证系统:

SELECT * 
FROM userlist 
WHERE name ='" + username + "';

现在,假设攻击者输入以下用户名:

username = ' OR '1'='1

这将创建一个如下所示的查询:

SELECT * 
FROM userlist 
WHERE username=' ' OR '1'='1';

因此,作为查询结果绕过身份验证将始终返回有效响应,因为 OR 条件始终评估为真。 这是一个基本的 SQLi 攻击。您可以组合多个查询,例如:

DROP TABLE userlist;

并按以下方式将其附加到原始查询中:

SELECT * 
FROM userlist 
WHERE username=' ' OR '1'='1';DROP TABLE userlist;

这将从数据库中删除名为“userlist”的表。

希望有所帮助。

【讨论】:

以上是关于什么是 SQL Server 上的 SQL 注入攻击?我们如何预防它们? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

什么是 SQL注入?怎么预防?

什么是 SQL注入?怎么预防?

SQL注入基础知识

SQL Server 中的 SQL 注入如何击败转义单引号的卫生设施?

SQL Server - 动态数据透视表 - SQL 注入

让你彻底明白sql注入攻击