前端会遭遇SQL注入吗?我写的搜索功能是不是有风险? 诸葛怡萱 提问于 2026-03-06 11:53:18 阅读 15 前端 我在做一个商品搜索功能,用户输入关键词后通过 fetch 发请求到后端接口。后端是用 PHP 写的,直接拼接 SQL 查询,比如: $sql = "SELECT * FROM products WHERE name LIKE '%" . $_GET['q'] . "%'"; 同事说这样会有 SQL 注入,但我觉得前端只是发个请求,应该没问题吧?是不是只要后端处理好就行?可我又听说现在有些攻击能绕过前端验证,有点懵…… SQL注入前端安全 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 子涵 Lv1 这确实是个严重的SQL注入风险,前端并不能保护你,后端这么写简直就是给黑客开大门。让我解释清楚: 1. 前端验证就是个装饰品,攻击者完全可以绕过浏览器直接发请求,甚至用curl这类工具手动构造恶意参数。 2. 你同事说的对,直接拼接SQL字符串非常危险。比如用户输入' OR '1'='1,你的SQL就变成永远为真,会泄露整张表数据。 更好的写法是用预处理语句,PHP可以这样改: $stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE ?"); $stmt->execute(["%" . $_GET['q'] . "%"]); 3. 额外建议:前端可以加个简单的输入校验(比如限制特殊字符),但记住这只是为了提升用户体验,绝不能替代后端防护。 4. 最惨的情况:如果你们项目里到处都是这种拼接SQL,建议准备好通宵加班改代码...我经历过,简直噩梦。 回复 点赞 2026-03-06 12:02 加载更多 相关推荐 2 回答 40 浏览 在前端用模板字符串拼接SQL时,怎么防OWASP Top 10的注入漏洞? 我在做用户搜索功能时,后端让前端传原始搜索词,用模板字符串拼接SQL查询。但测试时发现这属于A03注入漏洞。虽然改用了参数化查询,但后端报错说参数顺序不对... 具体场景是用户输入框内容拼接到"SEL... 佳沫的笔记 安全 2026-01-26 15:59:27 1 回答 9 浏览 前端传数字ID到后端,做类型检查能防SQL注入吗? 我在写一个用户信息查询功能,前端传了个用户ID给后端接口。听说只要确保这个ID是数字就能防止SQL注入,是真的吗? 我试过在前端用typeof id === 'number'判断,但发现用户还是可以通... a'ゞ翌菡 安全 2026-03-03 20:25:18 1 回答 21 浏览 前端用 Prepared Statement 能防 SQL 注入吗? 我最近在学安全防护,看到说用 Prepared Statement 可以防止 SQL 注入。但我是在写前端代码(比如用 fetch 发请求),那我在前端拼 SQL 字符串然后发给后端,是不是照样会被注... 东方晓萌 安全 2026-02-27 04:52:17 2 回答 34 浏览 在Sequelize中使用findOrCreate时如何防止SQL注入? 最近在用Sequelize做用户注册功能时,发现直接拼接查询条件可能会有SQL注入风险。比如这样写: User.findOrCreate({ where: { username: req.body.u... 夏侯梦森 安全 2026-02-11 10:40:35 1 回答 67 浏览 TypeORM里用Raw写SQL会有注入风险吗? 我最近在用TypeORM的Raw函数拼接查询条件,但担心这样会不会有SQL注入漏洞?比如下面这段代码: const users = await getRepository(User) .find({ ... 一家淼 安全 2026-03-06 00:28:21 2 回答 21 浏览 React里用预编译语句防SQL注入时参数化失败怎么办? 我在React组件里用Axios调用后端查询接口,参数直接拼接到SQL字符串里了,担心SQL注入风险。按照教程改成预编译语句后,参数化一直失败,控制台报错说"参数位置无效"。 这是我的代码片段: //... UX子武 安全 2026-02-12 22:12:30 2 回答 37 浏览 Vue过滤特殊字符后为什么SQL注入还能被绕过? 在Vue项目里处理搜索框输入时,我给后端API加了引号过滤,但测试SQL注入时发现还是能绕过... 具体场景是用户输入搜索词会拼接SQL语句,我在前端用了正则过滤单双引号,但输入" OR 1=1--%... 慕容喜静 安全 2026-02-12 14:05:32 1 回答 12 浏览 用ORM就真的不会SQL注入了吗? 我最近在用 Sequelize 写接口,听说 ORM 能防 SQL 注入,但心里还是不踏实。比如下面这种写法: const user = await User.findOne({ where: { i... 迷人的志红 安全 2026-02-25 09:44:19 2 回答 24 浏览 W3af扫描显示SQL注入漏洞,但手动测试没问题,哪里出错了? 用W3af扫描公司登录接口时,它提示存在SQL注入漏洞,但我在Postman里试了' OR '1'='1之类的payload完全没反应。后端用了参数化查询,是不是W3af误报了? 我按教程配置了gre... 宇文东霞 安全 2026-02-15 20:24:37 2 回答 60 浏览 React表单输入转义后SQL注入还是能攻击成功怎么办? 在React里处理用户输入时,我用了字符串替换方法转义了单引号,但测试时发现还是能执行SQL注入,这是为什么? 比如这个登录表单处理函数: handleSubmit = (event) => {... Des.东景 安全 2026-02-14 14:32:30
1. 前端验证就是个装饰品,攻击者完全可以绕过浏览器直接发请求,甚至用curl这类工具手动构造恶意参数。
2. 你同事说的对,直接拼接SQL字符串非常危险。比如用户输入
' OR '1'='1,你的SQL就变成永远为真,会泄露整张表数据。更好的写法是用预处理语句,PHP可以这样改:
3. 额外建议:前端可以加个简单的输入校验(比如限制特殊字符),但记住这只是为了提升用户体验,绝不能替代后端防护。
4. 最惨的情况:如果你们项目里到处都是这种拼接SQL,建议准备好通宵加班改代码...我经历过,简直噩梦。