Questions tagged «sql-injection»

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

9
参数真的足以阻止Sql注入吗?
我一直在向我的同事和SO讲这件事,说明在SQL查询中,尤其是.NET应用程序中使用参数的好处。我什至甚至承诺它们可以抵抗SQL注入攻击。 但是我开始怀疑这是否是真的。是否有任何已知的SQL注入攻击都可以针对参数化查询成功执行?例如,您是否可以发送导致服务器上的缓冲区溢出的字符串? 当然,要确保Web应用程序安全是需要考虑的其他事项(例如,清理用户输入和所有其他内容),但是现在我正在考虑SQL注入。我对MsSQL 2005和2008的攻击特别感兴趣,因为它们是我的主要数据库,但是所有数据库都很有趣。 编辑:澄清我的意思是参数和参数化的查询。通过使用参数,我的意思是使用“变量”而不是在字符串中构建sql查询。 因此,不要这样做: SELECT * FROM Table WHERE Name = 'a name' 我们这样做: SELECT * FROM Table WHERE Name = @Name 然后在查询/命令对象上设置@Name参数的值。


5
MongoDB如何避免SQL注入混乱?
我读了我值得信赖的O'Reilly书,发现一段关于Mongo本质上如何避免SQL注入式缺陷的麻烦的文章。 以我的直觉,我想我明白这一点。如果unsanitized瓦尔传递到查询,他们无法攻破了面向文档的查询结构的出UNION,JOIN,查询翻评论,等等。 MongoDB如何避免SQL注入混乱?只是这种查询语法的本质吗?

6
如何通过SQL Server中的SQL注入来克服单引号引起的卫生问题?
首先,我很清楚参数化查询是最好的选择,但是我在问什么使下面介绍的策略易受攻击。人们坚持认为以下解决方案无效,因此我在寻找一个示例说明为何不可行。 如果动态SQL在发送到SQL Server之前使用以下转义代码内置在代码中,则哪种注入方式可以克服这种情况? string userInput= "N'" + userInput.Replace("'", "''") + "'" 这里回答了类似的问题,但我认为任何答案都不适用于这里。 在SQL Server中,不能用“ \”转义单引号。 我相信使用Unicode的SQL走私(在此处概述)会因生成的字符串被单引号前面的N标记为Unicode而受到阻碍。据我所知,SQL Server不会自动将其他字符集转换为单引号。没有单引号的转义,我认为注入是不可能的。 我也不认为String Truncation是可行的方法。根据Microsoft的说法, SQL Server肯定不会进行截断,因为一个的最大大小为nvarchar2GB 。2 GB的字符串在大多数情况下是不可行的,在我的情况下是不可能的。 二阶注入是可能的,但在下列情况下是可能的: 使用上述方法对进入数据库的所有数据进行清理 数据库中的值永远不会附加到动态SQL中(为什么只要可以在任何动态SQL字符串的静态部分中引用表值,您仍然会这样做吗?)。 我并不是说这比使用参数化查询更好或替代,但是我想知道我概述的内容是多么容易受到攻击。有任何想法吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.