转载:SQL 注入一点小心得

好久没写技术博客,最近研究产品关于用户体验方面较多,加上项目突然比较多,设计原型、跟进开发、设计师等工作着实没时间写博客。

接下来技术上主要php深入学习和mysql优化。这两天看了关于sql注入方面的知识,拿出来分享一下 :)  

登录注入

先看一个我们一般用的登录页面sql语句(原生态php执行的sql)

$sql = "select * from users where username = '$username' and password = '$password'";

对于这种sql,对应一个万能密码和用户名:

万能密码: xx' or 1='1
万能用户名: xx' union select * from users/*

执行时mysql解释为:

$sql = select * from users where username = '$username' and password = ' xx' or 1='1'

不解释,瞬间破解

同样,上面是在sql语句中查询字段后的输入值加了单引号,有些时候尤其是初级程序员经常对变量不加单引号:

$sql = "select * from users where username = $username and password = $password";

这时mysql解释会被当做数字型字段来匹配

万能密码: 11 union select * from users/*

执行