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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《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年前