一处whereRaw引起的SQL注入,网警找到了我

问题是这样的,今天早上老板收到一通电话,说是公安打电话给ta,说网站有一处SQL注入漏洞,我把电话回拨过去了,根据上面的提示找到了

现在看确实犯了很简单的错误,之前都没有意识到,贴一下问题处:
整改前的:
一处whereRaw引起的SQL注入,网警找到了我
整改后的:

一处whereRaw引起的SQL注入,网警找到了我

贴一下微信聊天

一处whereRaw引起的SQL注入,网警找到了我

第一次碰到这种,以往有漏洞,可能在各大云服务器平台收的提醒,感觉挺新奇的,就发出来了,不知道有没有老哥碰到过

有点标题党了哈,祝大家新的一年,少写bug:joy:

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 22

这不是laravel的bug,whereRaw本来就有sql注入的风险

2个月前 评论
ljheisenberg (楼主) 2个月前
springlee (作者) 2个月前
ljheisenberg (楼主) 2个月前

好负责的网警

sql 注入很简单就可以防护

  1. 不要相信前端提交的信息
  2. sql 只有两种数据类型
    • 数字: 整数、小数,直接强制转换
    • 字符串: 普通字符串、日期字符串、json字符串。 都是字符串,将里面的单引号双引号处理下就可以避免注入
# query :  ?id=1 or 2=2
# 拼接  where id =1 or 2=2  ,就会注入,直接将数字强制转换,他就gg了

# query :  ?id=1 -- 3 = 3
#拼接  where id =1 -- 3 = 3 and status =1 ,拼接后后面的就无效了,就可以读取任意数据

# query :  ?name=zhangsan ' --
# 同上  where name='zhangsan ' --' status = 1 , -- 会注释后面的有效信息,导致注入风险,如果配合 update,将可以修改任意数据

防护也很简单, 有自带函数 mysqli_real_escape_string, 原理也简单,处理特殊字符,不给他机会

2个月前 评论
ljheisenberg (楼主) 2个月前
kis龍 (作者) 2个月前
kis龍 (作者) 2个月前

你的代码问题是参数值直接填充到SQL中,导致了SQL注入,参数应该通过绑定填充。

# whereRaw方法第二个参数就是绑定参数。
$builder->whereRaw(:sql, :bindings, ...);

贵司应该是政府安全项目相关的吧,我们以前SQL注入,网警怎么不给我们打电话:satisfied:

2个月前 评论
ljheisenberg (楼主) 2个月前

新奇:joy:

raw 翻译过来不就是原生,所以 raw 得要自己注意。

造一个laravel漏洞 讲解sql盲注原理

2个月前 评论
ljheisenberg (楼主) 2个月前

很基础的安全知识,不应该 :neutral_face:

2个月前 评论

兄弟,这确实是你的锅,文档应该读几遍

2个月前 评论

这个新鲜啊,真是长见识了

2个月前 评论

网警怎么发现的

2个月前 评论
ljheisenberg (楼主) 2个月前

网警还管这事?

2个月前 评论
唐章明 2个月前

我也遇到过被网管通知,不过不是SQL注入,而是JS版本太低被检测出有风险,让我整改。

2个月前 评论

搞拼接都有可能呀)一般用statement做预处理。最好么还是ORM。

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!