SQL注入防御

通常情况下,可以使用预编译解决sql注入问题,当有特殊业务场景必须使用拼接时,我们要对sql进行过滤

解决方案

  1. 只允许ASCII 码(0~128),超过128认为是恶意字符
  2. 过滤危险字符,防止逃逸
'
"
\
\r
\n
\0

例如如下语句:

select * from table where name='text';

假设此时text的值为

1' or '1'='1

那么这个sql语句就变成了

select * from table where name='1' or '1'='1';

那么这个sql语句将永远查询所有的行而不用管name的值

  1. 过滤退出等危险字符
0x1a
  1. 要求编码中必须用单双引号包含需要拼接内容
    举个例子
select * from table where name=text;

如果text的值为:

1 or 1=1

那么语句变成了:

select * from table where name=1 or 1=1;

那么我们过滤单引号双引号就没有意义了

你可能感兴趣的:(SQL注入防御)