The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
loading

数据库 like 参数用拼接会有隐患吗?

  •  
  •   loading · Jun 17, 2019 via Android · 4527 views
    This topic created in 2702 days ago, the information mentioned may be changed or developed.
    router.POST("/post", func(c *gin.Context) {

    keyword := c.Query("keyword")

    keyword="%"+keyword+"%"

    rows, err := db.Query(`SELECT * From user where name like ?`,keyword)


    伪代码,请见谅。

    问题:这样拼接 like 参数(主要是加通配符),会有注入风险吗?
    最佳实践是什么?
    13 replies  •  2019-06-20 19:18:56 +08:00
    zuoakang
    zuoakang
    Jun 17, 2019 via Android❤️3
    1
    肯定的咯,一般都是把 keyword 再加一层双引号
    blless
    blless
    Jun 17, 2019 via Android❤️1
    2
    参数化查询了解一下
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Jun 17, 2019 via iPhone❤️2
    3
    不用 preparedstatement 避免不了
    raptium
    raptium
    Jun 17, 2019❤️2
    4
    楼主的例子应该就已经是参数化的了吧,我看着好像没问题啊
    Takamine
    Takamine
    Jun 17, 2019 via Android❤️1
    5
    一般都是走预编译吧。
    不放心就加一层参数检验正则就行。
    raptium
    raptium
    Jun 18, 2019 via iPhone❤️1
    6
    又想了一下,如果 keyword 里本来就有 % 似乎查到的就不是想要的了。
    loading
    loading
    OP
    Jun 18, 2019 via Android
    7
    @raptium keyword 这个起码可以在前端搞定,差不到只是涉及到对不对而已,这个后端关注的应该是安全性多一些。
    wenzhoou
    wenzhoou
    Jun 18, 2019 via Android❤️1
    8
    应该是没有问题,但是实际上还是应该做,去除控制字符,并且分词然后查询
    ebingtel
    ebingtel
    Jun 18, 2019❤️1
    9
    没问题 你的 sql 里面已经有"?"占位符了……客户端会做预编译的
    razertory
    razertory
    Jun 18, 2019❤️1
    10
    注入不会。不过要考虑索引问题,
    msg7086
    msg7086
    Jun 18, 2019❤️1
    11
    keyword 本身还要做%和_的转义吧。
    loading
    loading
    OP
    Jun 18, 2019 via Android
    12
    感谢楼上所有老铁。
    spacewander
    spacewander
    Jun 20, 2019
    13
    如果只是想查询是否包含给定的 keyword,可以试下用 DB 提供的字符串查找 SQL 函数,比如 strpos。性能会好些,另外不用担心转义的问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1135 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 23:16 · PVG 07:16 · LAX 15:16 · JFK 18:16
    ♥ Do have faith in what you're doing.