网易首页 > 网易号 > 正文 申请入驻

Prisma防不住SQL注入:1个$queryRawUnsafe参数让10万用户密码裸奔

0
分享至

去年有安全研究员在Twitter发截图——某知名电商搜索框输入一串单引号,整页用户密码直接蹦出。评论区有人问:不是用了ORM吗?怎么还会这样?

这个问题,我们用一段真实可复现的代码来回答。


这是一个专门学习Web安全的开源项目,技术栈是Next.js + Prisma。Prisma作为Node.js生态最受欢迎的ORM之一,确实能在大多数时候挡住SQL注入,但前提是你别主动绕过它的防护机制。而这个项目的搜索功能,恰恰踩了这颗雷。

实验环境:3分钟搭好靶场

想亲手复现漏洞,有两条路。本地Node.js环境:

npx create-oss-store oss-store

cd oss-store

npm run dev

或直接用Docker,连Node都不用装:

docker run -p 3000:3000 leogra/oss-oopssec-store

服务启动后访问 http://localhost:3000,你会看到功能完整的电商界面。商品列表、购物车、结账流程一应俱全。目标藏在最显眼的地方——顶部导航栏的搜索框。

攻击面分析:搜索框里的字符串拼接

搜索框调用的接口很直接:

/api/products/search?q=<搜索词>

用户输入什么,后端就搜什么。听起来正常,直到看一眼实现方式:后端收到q参数后,没有做任何转义或参数化处理,直接把字符串塞进SQL语句的LIKE子句。这意味着输入的每个字符——包括单引号、注释符、分号——都会原封不动变成SQL代码的一部分。

这种设计给攻击者留了敞开的门:用单引号闭合原本的查询上下文,后面就能接上任意SQL语句。典型的UNION注入场景。

第一步:确认注入点

先做正常搜索,输入fresh,能看到包含该关键词的商品列表,界面正常渲染,说明端点确实在用q参数查数据库。

现在换payload:

' UNION SELECT 1,2,3,4,5--

如果页面没报错,反而正常显示了一些"商品",注入成功。这个payload的工作原理是:前面单引号闭合原本的LIKE '%xxx%',后面UNION SELECT把5个常量合并进结果集,双横线注释掉原本语句的剩余部分。页面能渲染,说明后端完全信任了用户输入,把它当代码执行。

第二步:拖库实战

确认注入点后,下一步拿真实数据。需要知道users表有哪些列,以及它们的顺序。从代码里能看到,原始查询选了5列:id、name、description、price、imageUrl。所以UNION SELECT也要凑5列,类型可以混,但数量必须对齐。

最终payload:

DELIVERED' UNION SELECT id, email, password, role, addressId FROM users--

DELIVERED是商品名里的关键词,让前半句不返回空结果。后面的UNION把users表5个字段直接合并进商品查询结果。前端界面不会区分数据来自哪张表,只管渲染。于是你会在商品列表里看到一行行"商品"——名字是用户ID,描述是邮箱,价格是密码哈希。

用curl更直观:

curl "http://localhost:3000/api/products/search?q=DELIVERED%27%20UNION%20SELECT%20id%2C%20email%2C%20password%2C%20role%2C%20addressId%20FROM%20users--"

返回的JSON里,password字段躺着完整的用户凭证。

代码解剖:$queryRawUnsafe的危险承诺

漏洞核心在这里:

const sqlQuery = `

SELECT * FROM products

WHERE name LIKE '%${query}%'

OR description LIKE '%${query}%'

const products = await prisma.$queryRawUnsafe(sqlQuery);

注意那个Unsafe后缀。Prisma文档写得清楚:这个方法不转义、不参数化,把字符串原样发给数据库。开发者用了它,就等于亲手拆掉了ORM的防护墙。

更讽刺的是,Prisma提供了安全的替代方案——$queryRaw配合模板字符串标签函数:

const products = await prisma.$queryRaw`

SELECT * FROM products

WHERE name LIKE ${`%${query}%`}

同样能实现模糊搜索,但用户输入会被自动转义,注入攻击无从下手。区别只在于:有没有那个Unsafe后缀,以及有没有把变量直接嵌进模板字符串。

修复方案:一行代码的差距

最安全的改法是用参数化查询。如果业务需要动态表名或列名(本例不需要),可以配合查询构建器,但绝不要把用户输入直接拼接进SQL字符串。

另外,生产环境建议启用Prisma的查询日志审计,定期检查有没有代码调用了$queryRawUnsafe。这个函数名本身就是警示——除非万不得已,别碰它。

SQL注入在2024年依然稳居OWASP Top 10,不是因为技术多新,而是因为总有人图省事。ORM不是万能药,它提供的安全边界,需要开发者主动待在边界内。一旦为了"灵活"而绕过防护,代价可能是整库数据泄露。

那个Twitter截图里的电商,后来发公告说"已修复"。但没人知道,在修复之前,有多少人的密码已经被拖走。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
Manus,彻底凉凉了

Manus,彻底凉凉了

技术领导力
2026-04-27 20:37:27
上海“AA制生娃”事件引发全网愤怒,这个局背后真是步步惊心啊

上海“AA制生娃”事件引发全网愤怒,这个局背后真是步步惊心啊

桌子的生活观
2026-04-29 12:27:11
ESPN:皇马内部认为姆巴佩和维尼修斯无法共存,但老佛爷不这么想

ESPN:皇马内部认为姆巴佩和维尼修斯无法共存,但老佛爷不这么想

懂球帝
2026-04-29 21:30:10
股价暴跌97%,市值仅剩12亿,爱奇艺为何成互联网 “最惨选手”?

股价暴跌97%,市值仅剩12亿,爱奇艺为何成互联网 “最惨选手”?

青眼财经
2026-04-29 17:39:07
网传郭德纲曹云金将同台演出,宣传海报及师徒聊天记录曝光

网传郭德纲曹云金将同台演出,宣传海报及师徒聊天记录曝光

娱慧
2026-04-29 18:17:21
小情侣在餐厅内亲密互动,身体抖动举止不雅,目击者:裤子脱了

小情侣在餐厅内亲密互动,身体抖动举止不雅,目击者:裤子脱了

李晚书
2026-04-29 16:56:06
常住人口220多万的马鞍山市,一季度只有914名新生儿,同比暴跌67.4%

常住人口220多万的马鞍山市,一季度只有914名新生儿,同比暴跌67.4%

小萝卜丝
2026-04-29 17:08:19
上海地铁互殴乘客彻底社死!处罚结果公布,拘留只是“开胃菜”

上海地铁互殴乘客彻底社死!处罚结果公布,拘留只是“开胃菜”

奇思妙想草叶君
2026-04-29 23:46:29
余承东再次向奇瑞董事长,正式道歉

余承东再次向奇瑞董事长,正式道歉

小李车评李建红
2026-04-29 08:00:03
别再信什么和平分手了,当年田雨给汤唯最后通牒,上比电影还狠

别再信什么和平分手了,当年田雨给汤唯最后通牒,上比电影还狠

小鲸叫我照顾海
2026-04-30 01:58:16
湖南某医院职工举报院长儿子“吃空饷”涉百万奖金,医院纪委查实“重复拿钱”2万元并退款,否认“吃空饷”,举报人要求提级调查

湖南某医院职工举报院长儿子“吃空饷”涉百万奖金,医院纪委查实“重复拿钱”2万元并退款,否认“吃空饷”,举报人要求提级调查

大风新闻
2026-04-29 20:46:09
斯诺克世锦赛彻底乱了:随着罗伯逊10-13,世界前三都无缘争冠

斯诺克世锦赛彻底乱了:随着罗伯逊10-13,世界前三都无缘争冠

侧身凌空斩
2026-04-30 06:20:50
悬念不大了!NBA季后赛8强,大概率就是这8支!两大冠军热门淘汰

悬念不大了!NBA季后赛8强,大概率就是这8支!两大冠军热门淘汰

篮球扫地僧
2026-04-30 07:08:57
14死37伤!以不宣而战,深夜美军开火击毙3人,内塔尼亚胡或入狱

14死37伤!以不宣而战,深夜美军开火击毙3人,内塔尼亚胡或入狱

今墨缘
2026-04-30 04:13:52
为什么住院14天必须出院

为什么住院14天必须出院

老郭在学习
2026-04-29 13:49:19
金某某驾驶重型自卸货车,与骑自行车的何某某发生碰撞并碾压致其死亡,广东清远公布事故调查报告

金某某驾驶重型自卸货车,与骑自行车的何某某发生碰撞并碾压致其死亡,广东清远公布事故调查报告

大象新闻
2026-04-28 22:48:18
一首歌狂赚1亿买5辆豪车,如今卖房卖车负债,广东雨神经历什么

一首歌狂赚1亿买5辆豪车,如今卖房卖车负债,广东雨神经历什么

一盅情怀
2026-04-29 16:37:16
章子怡这张照片真的有点吓到我了!就是后面那些墙壁

章子怡这张照片真的有点吓到我了!就是后面那些墙壁

小椰的奶奶
2026-04-30 00:22:01
马竞1-1阿森纳,赛后评分:不是阿尔瓦雷斯第一,阿森纳14号第一

马竞1-1阿森纳,赛后评分:不是阿尔瓦雷斯第一,阿森纳14号第一

侧身凌空斩
2026-04-30 04:58:50
千名学者联名要求美国西北大学为致华裔神经科学家吴瑛自杀道歉

千名学者联名要求美国西北大学为致华裔神经科学家吴瑛自杀道歉

TOP大学来了
2026-04-30 01:24:35
2026-04-30 07:39:00
硅屿手记
硅屿手记
有态度网友ytd
3269文章数 15关注度
往期回顾 全部

科技要闻

今晨庭审纪实|马斯克当庭讲述OpenAI被偷走

头条要闻

普京与特朗普通话:美对伊朗采取地面行动是危险选择

头条要闻

普京与特朗普通话:美对伊朗采取地面行动是危险选择

体育要闻

一场九球狂欢,各路神仙批量下凡

娱乐要闻

马頔一句话,孙杨妈妈怒骂节目组2小时

财经要闻

苏州,率先进入牛市

汽车要闻

技术天花板再摸高 全能型的奕境X9首秀

态度原创

艺术
健康
家居
房产
公开课

艺术要闻

许家印收藏的字

干细胞治烧烫伤能用了么?

家居要闻

寂然无界 简洁风格

房产要闻

80亿投资!浙商总部基地+海口北站,金沙湾这是要起飞啊!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版