1. SQL注入
1.1原因描述:
用户名和密码的参数是直接引用,可用拼接的方式。
1.2 拼接方式
' or '1'='1 (这个可以作为参考原型,变种很多,百度都有)
主要是拼接成这样的SQL:
效果如此:即使没有拼接查询张三,依然能查到数据库的张三,因为 'or' 后面 1=1永恒成立。
具体操作时分号要灵活使用,
例如图一中,password没加分号,那么password中的 or 1=1 则不需要分号。
后台的分号结构都不是固定的,想办法拼凑,有的不加分号也可以。可进行多次尝试。
1.3 避免方法
Mybatis中,将去掉图一中的分号“ ' ”,并且把’$’ 改为 ’#’,让参数作为值插入,而不是字符串拼接。
1.4 补充
此方法还和后台有关系:
上面的页面能登录成功并且进入,因为数据库只有一条数据,如果有多条数据
后台页面如下:
此时如果有两条数据,就会报错。
当然,如果有已知的用户名,并且用户名是数据库存在并且唯一,而密码进行sql注入,就不会出现这种情况。。
或者,如果后台开发人员粗心这么写:
不管他数据库有几条数据,用户名和密码都可以随便写,都可以轻松绕过啦。。。
PS: SQL注入是几年前非常流行的漏洞,现在已经非常非常少见,不排除运气好,能遇到不知名的小网站猫进去。这里仅作为安全基础知识,熟悉一下。