最近在编程中遇到1个SQL注入防护的问题。在这里顺便把SQL注入小结1下。以MYSQL(5.1)为例。
1、常规的SQL语句
视察SQL语句
SELECT * FROM [tableName] WHERE col1='value1'
这个语句由3个部份组成,SELECT子句挑选得到结果,FROM子句指定了挑选的范围,WHERE子句指定了条件。当在其中进行以下置换:
SELECT * FROM [tableName] WHERE 1
以后,选出了[tableName]表中的全部内容。分析其语法不难发现,WHERE将其后的真值表达式求值,然后作为挑选的条件。
2、WHERE子句的理解
现在(在MYSQL5.1)中测试以下语句
SELECT * FROM [tableName] WHERE false or 1=‘1’ and '1'='1' and "1"="1"
一样得到了[tableName]表种的全部内容。
这个测试说明了两点:
1、WHERE对后面的表达式进行真值计算
2、不带符号、'与"都可以通过真值测试,可能不是个别特殊符号的问题
3、WHERE子句在编程中的使用
通常是采取字符串拼接的方式