sql注入式攻击用传参方式解决的原因


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

采用字符串式:
user: sa’ or ‘1=1 或 sdfsdfsd’ or ‘1=1 — (无论用户名密码是否正确都可进入。注:mysql注释用#,sqlserver用–)
password: sdfsdf ( 随便 )
用字符串连接就变成: select * from frmUser where user = ‘sa’ or ‘1=1’ and password = ‘sdfsdf’ 通过!造成注入。
万能密码:’or”=”or”=’
采用传参方式:
command.CommandText = “SELECT * FROM frmUser WHERE user = @user”;
SqlParameter sp = new SqlParameter( “@user” ,8);
若传user = sa’ or ‘1=1
则sql 语句变成: select * from frmUser where user = “sa’ or ‘1=1’ ” and and password = ‘sdfsdf’
将user传的参数限定在一个变量内。原理是在参数外加上””, 之后若参数内存在单引号或双引号,则统一转成单引号,因最外部是双引号,参数中的单引号,双引号将会被当作用户名的一部分,不会当成分隔,不会象字符串连接一样使sql语句被截断,产生多个条件!