小程序刚审核通过就被sql注入

账号用的是openid作为账号,登录的时候存在就登录,不存在就登录注册,目前没有做验证,打算增加个token,有没有很好的建议?laravel框架怎么防止sql注入?注意点在哪里

小程序刚审核上线测试就被sql注入

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

嗯...我想起来之前做的一个项目也是小程序被 SQL 注入的过程,也是在注册时发生的,我描述一下场景,你看看是不是你的情况:

  1. 用户发起授权,传一个 code 给后端,后端解析小程序 session,返回给前端
  2. 在前端再在把微信用户信息传给我,此时,是可以直接取到前端传给我的 wx_open_id 的
  3. 我当时就是直接把前端回传的 open_id 直接写库了,然后就凉凉了。

后来我在解析 session 的时候获取到的 open_id 写入缓存了,给一个 5 分钟的有效期,前端在授权成功再次请求创建用户接口时,我到缓存中去取 open_id ,如果两个值相等才创建用户,这个是比较容易被疏忽的部分,你看下你的是不是也和我犯了一样的错误。

前端传递的 open_id 字段不可信。

2年前 评论
23tl 2年前
my38778570 (楼主) 2年前
my38778570 (楼主) 2年前
MArtian (作者) 2年前
MArtian (作者) 2年前
23tl 2年前
陈先生 2年前
讨论数量: 65

laravel的db操作是自带防注入的,检查一下你是否使用了原生语句,或者字符串拼接操作

2年前 评论
my38778570 (楼主) 2年前

方案1 : 走openid

后端自己用 js_code 去获取openid 信息, 走注册功能

方案2 : 走项目自己的注册功能

加验签功能, 前端传输字段增加 sign
通过排序请求参数等,前后端统一加密算法, 验证数据合法性
合法则注册
不合法忽略
再做个 ip 黑名单, 这个ip 直接拒绝请求就好了

2年前 评论
诺大的院子 2年前
派大旺 (作者) 2年前

你这数据都正常插入了,说明已经防住了,剩下的就是你的业务逻辑验证要加强了

2年前 评论

怎么没有用小程序的认证呢

2年前 评论
my38778570 (楼主) 2年前

嗯...我想起来之前做的一个项目也是小程序被 SQL 注入的过程,也是在注册时发生的,我描述一下场景,你看看是不是你的情况:

  1. 用户发起授权,传一个 code 给后端,后端解析小程序 session,返回给前端
  2. 在前端再在把微信用户信息传给我,此时,是可以直接取到前端传给我的 wx_open_id 的
  3. 我当时就是直接把前端回传的 open_id 直接写库了,然后就凉凉了。

后来我在解析 session 的时候获取到的 open_id 写入缓存了,给一个 5 分钟的有效期,前端在授权成功再次请求创建用户接口时,我到缓存中去取 open_id ,如果两个值相等才创建用户,这个是比较容易被疏忽的部分,你看下你的是不是也和我犯了一样的错误。

前端传递的 open_id 字段不可信。

2年前 评论
23tl 2年前
my38778570 (楼主) 2年前
my38778570 (楼主) 2年前
MArtian (作者) 2年前
MArtian (作者) 2年前
23tl 2年前
陈先生 2年前

使用js_code去换取openid不就行了.这样保存在数据库的openid就是对的,前端传的肯定不能信

2年前 评论
my38778570 (楼主) 2年前

为什么我就没有这么幸运呢

2年前 评论
my38778570 (楼主) 2年前
小学毕业生 (作者) 2年前
my38778570 (楼主) 2年前
李铭昕

你 openid 是前端传给你的??不应该是后端解密的么。。。

2年前 评论
my38778570 (楼主) 2年前

记得微信小程序 后端可根据code 获取 openid 与 session_key 然后可以根据session_key 解密前端传的加密信息

2年前 评论
my38778570 (楼主) 2年前

我记得openid是固定多少位的,可以设置个char类型定长截断一下。 你可以在插入用户数据的时候使用字符串查询的方式看看里面有没有 select 、where 的一些sql关键字,用来过滤一下

2年前 评论
my38778570 (楼主) 2年前
巴啦啦臭魔仙 (作者) 2年前
my38778570 (楼主) 2年前
巴啦啦臭魔仙 (作者) 2年前
my38778570 (楼主) 2年前

我是不是理解错了?你这不是sql注入吧?就是黑客通过你的注册接口写入无效数据而已,然后你没有验证openid :joy:

2年前 评论
my38778570 (楼主) 2年前
my38778570 (楼主) 2年前

小程序接口是暴露的,数据校验、防刷、防攻击

2年前 评论

用授权按钮 传给你的code 你服务端获取到openid直接存起来 不用前端传 自己再写一套token验证用来登录

2年前 评论
my38778570 (楼主) 2年前

这个不算是sql注入,顶多是他用注入的方式绕过了验证,注册了无效的用户,本质你注册业务没有验证合法来源,加强注册验证吧,比如限流,授权open_id后端获取,或者动态加密再给到前段

2年前 评论
my38778570 (楼主) 2年前
Su 2年前
my38778570 (楼主) 2年前
Imuyu (作者) 2年前
my38778570 (楼主) 2年前

看了评论 不多说了 ! 小伙子 经过这次你会成长很多的

2年前 评论
my38778570 (楼主) 2年前

看了评论学到了很多。原来我也有同样的问题 还好我不是辛运儿 哈哈哈

2年前 评论
my38778570 (楼主) 2年前

作为一名后端,第一守则:永远不要相信前端传的任何数据,然后根据第一守则写代码。根据你的截图,明显是前端传什么,你信什么。

sql注入,laravel处理好了,不用关心,除非用你自己要写原生sql才需关心,

2年前 评论
my38778570 (楼主) 2年前
chowjiawei

登录 请验证

完善的验证规则 规定 他只能传入 数字 或者字母等 不含符号什么的 传都传不进来

2年前 评论
my38778570 (楼主) 2年前

你这些都是微信在审核小程序api 测试写入的,你查一下那个ip就知道了;你这个是存在逻辑漏洞但是不存在sql注入漏洞,不然小程序通不过的

2年前 评论
my38778570 (楼主) 2年前

你这都不是 sql 注入的问题,是没有验证输入,openid 应该是从微信校验获得的,不应该是前端传啥就存啥

2年前 评论
my38778570 (楼主) 2年前
sy_dante (作者) 2年前

让我突然想起,前几年用openid 投票那搞笑事情,靠这个智障bug 我还刷了点礼物😄

2年前 评论

没有直接传openid的吧,暴露了怎么办? 登陆都前端传code再获取openid的。

2年前 评论
my38778570 (楼主) 2年前

笑死,我劝同事不要用原生sql他都不听 :sweat_smile:

2年前 评论
my38778570 (楼主) 2年前
porygonCN

挖坟了哈, 我就一个问题 你都解析了openid了为什么还要传给前端再传回来? 请求登录时codeuserinfo一起发给后端不就行了嘛

2年前 评论
my38778570 (楼主) 2年前

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