php 登录功能sql注入原理及如何防止

比如你做个登录,登录的前端页面是不是一般需要两个值,一个用户名,一个密码
你php里一般就这么写,$usename = $_POST[''username];$password = $_POST[''password ];
然后select * from `user` where username = $_POST['username'] and password = $_POST['password']
如果能查出信息,说明用户填写的用户密码就对了,是不是?
sql语句实际运行:
select * from `user` where username = ‘zhanghao’ and password = 'mima'。
这个时候sql注入就会在填写密码的时候,加入引号
假设提交上来的password= 123'#
这个时候sql语句就变成什么了?
select * from `user` where username = ‘fanahilong’ and password = ' 123'#'
引号把前面的引号给结尾了
#号在sql里是注释的意思
这个时候继续搞password
假设提交上来的password= 123' or id=1#
sql语句变成什么了?
select * from `user` where username = ‘fanahilong’ and password = ' 123' or id=1#'
这样黑客不用密码就也能登陆了
根据后面输入的条件,他如果知道你的数据表id,想登录谁就登陆谁
如何防止?
转义 就这么简单
php有个函数专门干这个的
addslashes
这个函数发现引号,就会自动加上斜杠进行转移
php 登录功能sql注入原理及如何防止