后端要求前端传的查询参数

2020-04-17 14:39:12 +08:00
 zycojamie

比如,你输入一个手机号,进行查询,要把你手机号的值,查询是 like 还是=,数据是 string 还是 int,模糊还是精准查询,全部前端拼给后端。。。

这种方案可行吗。。。

7989 次点击
所在节点    程序员
79 条回复
onepunch
2020-04-17 14:43:42 +08:00
模糊查询前端做
racecoder00
2020-04-17 14:43:49 +08:00
不怕前端传个 drop table?
dremy
2020-04-17 14:44:18 +08:00
SQL 注入了解一下,公司分分钟倒闭
opengps
2020-04-17 14:44:38 +08:00
关键词,和是否 like,可以传
至于 string 还是 int 啥意思?
Jooooooooo
2020-04-17 14:46:59 +08:00
可行

关注一下防注入就行

不过虽然是可行, 方案不合理啊, 前端关心的是"模糊查询"而不是"模糊查询用 like"
BreezeInWind
2020-04-17 14:49:29 +08:00
传一串字符串,如果本身其实是可以精确匹配到的,但是查询人以为是模糊匹配的,因而传的是 like,后端怎么处理呢?一串非常长的数字,本来应该是字符串形式存放的,查询人以为是数字,传的是 int,此时又该怎么处理呢
jatesun
2020-04-17 14:50:35 +08:00
算了,这种事前端就别揽了
zycojamie
2020-04-17 14:51:29 +08:00
[' tempMatchType ": " 5,4 ", " propertyName ": " name,mobile, " propertyvaluel ": ",13541218876 "),
{" tempMatchType ": " 7 ", " propertyName ": " age " " propertyvaluel ": " 12 ", " tempType ": " Integer "},
tempMatchType ": " 11 ", " propertyName ": " role.id ", " prepertyvalue1 ": " 1,2,3,4 ", " tempType ": " List < Long >"}]
翻译成 hql = where ( name like %张三%' or mobile = 13541218876 and age > 12 and role.idin ( 1.2.3.4 )

前端就要把查询参数封装成上面那种数组
zycojamie
2020-04-17 14:53:52 +08:00
@jatesun 后端架构师说,为了他们拜托大量 if else,所以要求前端按照他们订的查询规则封装请求参数。。。
littleylv
2020-04-17 14:54:03 +08:00
我觉得楼主的意思并不是说前端要拼接好 ‘mobile like '%123%'’这样提交给后端,而是使用
{'field': 'mobile', 'value': '123', 'is_fuzzy': true} 这样传给后端,让后端去拼接。
loading
2020-04-17 14:57:18 +08:00
先在手机号前后拼接%,然后参数查询,用 like 。

如果有注入风险,请大佬们马上提醒我。
loading
2020-04-17 14:58:17 +08:00
sql 参数拼接还是不难的,没几行。
谁都是 crud boy 。
zycojamie
2020-04-17 14:58:19 +08:00
@littleylv 类似,但要求更复杂些(把大于等于,小于,小于等于,等于)都约定好是什么特定值,然后前端传参的时候,就要传(大于等于,小于,小于等于,等于)
littleylv
2020-04-17 15:00:00 +08:00
@loading #11
@loading #12 没看懂你想表达什么


@zycojamie #13 我觉得这么做挺好的,没问题
Rwing
2020-04-17 15:00:40 +08:00
GraphQL 欢迎你
yukiloh
2020-04-17 15:03:28 +08:00
这种接口别被我逮到,不然就直接送你出名
ZSeptember
2020-04-17 15:04:33 +08:00
这不是很正常的吗,难道不同的查询就要新增加一个接口?
RESTful 一般只提供一个查询接口,参考
https://github.com/Microsoft/api-guidelines/blob/master/Guidelines.md#971-filter-operations
lancerly
2020-04-17 15:05:03 +08:00
@zycojamie 这太搞笑了吧,前端的代码就不需要整洁性了?就可以随便写一大堆 if else 了?
wangxiaoaer
2020-04-17 15:08:40 +08:00
@yukiloh #16 这种接口有什么问题吗?

假如一些业务系统就是很需要很精确的查询:比较、类别、模糊 /精确切换等你怎么做???

现在后端要求是前端把这些非常精细的条件传过去,后端翻译成 sql,又没让前端直接拼、传 sql,只要后端在生成 sql 的时候做好防注入,有什么问题?
pap3r
2020-04-17 15:09:53 +08:00
前端爸爸不帮后端儿子擦屁股

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX