搜索功能直接拼SQL没做预编译,被人注入语句,整个用户表数据全被拖走
18年做美食站,写商家搜索功能,图省事,直接把用户在搜索框输的关键词,拼进SQL语句里:select * from shop where name like '%'.$_GET['keyword'].'%',当时觉得这样写快,不用搞什么预编译。结果上线没俩月,我登后台看用户数据,发现用户表少了一半记录,登录日志里有个外地IP,凌晨跑了一串SQL语句,直接把我整个用户表的账号密码都拖走了,我当时吓出一身冷汗,这要是用户数据泄露,我得赔多少钱。 我赶紧翻代码,发现就是这个搜索接口的问题,用户传的keyword参数,直接被拼进SQL,攻击者传一段带分号的恶意语句,直接绕过查询,把整个用户表的数据select出来,还删了一半记录。我当时连夜把所有数据库查询,全改成PDO预编译,用参数绑定,再也不直接把用户输入拼进SQL语句里,改完又补了数据库备份,才敢继续开站。 之前总觉得SQL注入是离自己很远的高级攻击,结果就因为图省事,直接拼SQL,一个小接口就被人把整个用户库拖走,之前那点省事的功夫,最后换来了通宵补漏洞的教训。从那之后我写任何PHP数据库代码,全用预编译参数绑定,再也不直接拼用户输入进SQL,不管多急的功能,这一步绝对不省。 很多新手写PHP跟我当初一样,图方便直接把用户输入拼进SQL,根本不用预编译,觉得SQL注入是大公司才会遇到的事,结果一个小站,一个小搜索接口,就被人把整个数据库的用户数据全拖走,删库跑路都有可能。真的,写数据库代码,预编译这一步绝对不能省,不然一个小漏洞,整个库的数据都没了。
本站源码来源于网络收集修改或者交换,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。
0