gpt4 book ai didi

go - 需要使用 golang 从 CQL 映射中删除,但要避免 CQL 注入(inject)

转载 作者:IT王子 更新时间:2023-10-29 02:24:18 27 4
gpt4 key购买 nike

我将内容存储在 CQL 的 map 中,我希望允许使用键删除该 map 中的特定内容。 key 是通过API从上面传入的,所以客户端可以传入任何它想要的东西。这是解释我的情况的代码片段......

func GenerateTrackingIdForDelete(tracking_id string) string {
if (tracking_id == "") {
return ""
} else {
return "['" + tracking_id + "']"
}
}

func DeleteAllTrackingURLs(qstringVars map[UrlKey]interface{},reqVars map[string]string, filter string, tracking_id string) error {
derr := cpool_new.Query("DELETE tracking_urls" + GenerateTrackingIdForDelete(tracking_id) + ` FROM template WHERE vendor_id = ? and advertiser_id = ? and filter = ? and template_id = ? and inst_id = ?`, qstringVars[VendorKey], qstringVars[AdvertiserKey], filter, reqVars["template_id"], reqVars["inst_id"]).Exec()

if derr != nil {
return errors.New("Failed to delete all under inst_id/template_id/filter/advertiser_id/vendor_id " + reqVars["inst_id"] + "/" + reqVars["template_id"] + "/" + filter + "/" + strconv.Itoa(qstringVars[AdvertiserKey].(int)) + "/" + strconv.Itoa(qstringVars[VendorKey].(int)) + " with error " + derr.Error())
}

return nil
}

以下是关于从 CQL 中的 map 删除的一些背景信息:http://www.datastax.com/documentation/cql/3.0/cql/cql_using/use_map_t.html

这里有一些可能的解决方案,但是有没有更干净的方法呢?

  • 有人可以只传入一个带有单引号的键,这会中断查询。我可以用另一个单引号转义每个单引号,但这够了吗?这种方法是否不好,因为 gocql 必须为每次删除的查询准备语句?
  • 实际获取那里的内容并在内存中修改它并插入它(从而更新记录)。这里的缺点是要写入更多数据。
  • 有两个单独的查询(一个用于要删除特定键的情况,另一个用于要删除整个 map 的情况)。这里的缺点是代码重复。

最佳答案

据我所知,目前,您必须自己构建查询才能对 Cassandra map 执行修补操作。

对于一般用途,最安全的方法是您的第二个建议;编码完整的 map 值,对其进行操作并执行插入/更新。

如果你的map[x]y是严格定义的;即 map[int]int 我可以毫无问题地构建自己的查询 - 但这还有其他问题,例如没有利用准备好的语句。

关于go - 需要使用 golang 从 CQL 映射中删除,但要避免 CQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25893997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com