mysql注入有哪些方式_SQL注入攻击的方法有哪些
没有正确过滤转义字符
在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞:
statement := "SELECT* FROM users WHERE name = " + userName + ";"
a or t=t,此时原始语句发生了变化:
SELECT * FROM users WHERE name = a OR t=t;
如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值t=t永远是正确的。
在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。
a;DROP TABLE users; SELECT * FROM data WHERE name LIKE %
这就将最终的SQL语句变成下面这个样子:
SELECT * FROM users WHERE name = a;DROP TABLE users; SELECT *
FROM DATA WHERE name LIKE %;
其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。
没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞: statement := "SELECT* FROM users WHERE name = " + userName + ";" a or t=t,此时原始语句发生了变化: SELECT * FROM users WHERE name = a OR t=t; 如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值t=t永远是正确的。 在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。 a;DROP TABLE users; SELECT * FROM data WHERE name LIKE % 这就将最终的SQL语句变成下面这个样子: SELECT * FROM users WHERE name = a;DROP TABLE users; SELECT * FROM DATA WHERE name LIKE %; 其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。