一个SQL 注入的典型例子
var ShipCity; ShipCity = Request.from("ShipCity"); var sql = "select * from OrdersTable where ShipCity = '"+ShipCity+"'";
变量ShipCity的值由用户提交, 在正常情况下,加入用户输入的是"Beijing" 那么SQL 语句会执行:
SELECT * FROM OrdersTable WHERE ShipCity = 'Beijing';
但假如用户输入一段有语义的SQL语句,比如:
beijing';drop table OrdersTable--
他的请求为
http://localhost:3452/ExcelUsingXSLT/Default.aspx?shipcity=beijing';drop table OrdersTable--
那么, SQL 语句在实际执行时就会如下:
SELECT * FROM OrdersTable WHERE ShipCity='Beijing'; drop table OrdersTable--'
我们看到,原本正常执行的查询语句, 现在变成了查询完后, 再执行一个drop表的操作, 而这个操作,是用户构造了恶意数据的结果。
回过头来看看注入攻击的两个条件;
1. 用户能够控制数据的输入 - 在这里, 用户能够控制变量 ShipCity.
2. 原本要执行的代码, 拼接成了用户的输入。
在sql 注入的过程中, 如果网站的Web 服务器, 开启了错误回显, 则会为攻击者提供极大的便利。
ShipCity