SQL注入 -- 概念及其应用

SQL 诸如是一种针对数据库进行攻击的恶意代码注入技术。通过指定的代码得到的返回来实现对一些隐私信息的获取。

以下仅仅考虑在网页中的SQL 注入方法,而不考虑在.NET的语言中的使用,同时将会涉及到一些简单的防范性任务。

如果SQL中有如下的语法来获取用户的Id以及pwd。

txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = ” + txtUserId;

我们可以基于一些绝对正确的真理来进行SQL注入的测试,如下所示:

我们将输入的用户名为105 OR 1=1, 基于1=1一定正确我们可以得到如下方法:

那么这段代码看起来就像这个样子:

SELECT * FROM Users WHERE UserId = 105 OR 1=1;

在where语句中,无论UserId是否有等于105的,我们由于1=1恒成立,当没有SQL保护的时候,将返回所有Users表单的信息。

还可以明确一点之后得到如下的信息:

SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;

此外还可以基于“=”恒正确来获取隐私信息:

如用户名为" or ""=" , 密码为" or ""=", 那么对应的SQL语句将会有下面的信息解析:

SELECT * FROM Users WHERE Name =”” or “”=”” AND Pass =”” or “”=”“

关于SQL注入的防范,我们可以使用

txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = @0”;
db.Execute(txtSQL,txtUserId);

通过这种在尾部添加多余变量的方式,可以防止类似于“=”以及1=1恒正确的SQL注入攻击。

参考文献

  1. SQL Injection From W3school

你可能感兴趣的:(软件工程,计算机网络)