1.没有正确过滤特殊字符,例如单引号和分号
如果你的sql语句是这样,又没过滤“’”单引号:
"SELECT * FROM tables WHERE param = '" + RequestString+ "'; "
攻击者将用户名变量(即RequestString)设置为:
a' or 't'='t
此时原始语句发生了变化:
SELECT * FROM tables WHERE param = 'a' OR 't'='t';
再配合“;”分号可以进行更多的sql注入攻击
";"分号用来执行多个语句。下面语句中的RequestString的值将会导致删除“tables”表,
又可以从“dataTables”表中选择所有的数据(实际上就是透露了每一个用户的信息)。
a'; DROP TABLE tables; SELECT * FROM dataTables WHERE param LIKE '%
这就将最终的SQL语句变成下面这个样子:
SELECT * FROM tables WHERE param = 'a'; DROP TABLE tables; SELECT * FROM dataTables WHERE param LIKE '%';
例如:“SELECT * FROM tables WHERE id = " + RequestID + "; "
从这个语句可以看出,作者希望RequestID是一个数字。
不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。
例 如,将RequestID设置为
1; DROP TABLE tables
就不需要上面说的“‘”单引号了,照样可以进行攻击:会将“tables”表从数据库中删除,
SQL语句变成:SELECT * FROM DATA WHERE id = 1; DROP TABLE users;
网站遭受SQL注入式攻击的基本方式:
1.最常见的也就是在查询字符串中直接输入SQL攻击字符串。
例如:page.asp?id=Num and exists (select * from [admin])
2.其次就是在FORM表单中提交的SQL注入攻击字段。
3.通过COOKIE绕过一些放注入的脚本程序
例如:javascript:alert(document.cookie="id="+escape("这就是asp? id=xx后面xx代表的数值) and (这里是注入攻击代码)"));