什么是 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 注入攻击?我们如何预防它们? [复制]的主要内容,如果未能解决你的问题,请参考以下文章