首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Couchbase注射?

Couchbase注射?
EN

Stack Overflow用户
提问于 2015-08-13 00:12:01
回答 1查看 703关注 0票数 2

Couchbase是一个相对较新的NoSql数据库。与任何其他新技术一样,它也伴随着一些安全问题。我花了相当多的时间来理解使用go-couchbase客户端库注入的风险。According to their documentation,我知道有可能形成模式和javascript注入攻击。然而,我不能形成任何令人讨厌的攻击。在Couchbase端,普通字符串值似乎没有被解析(Eval)。下面是我的示例:

代码语言:javascript
复制
cbbucket, err = cbpool.GetBucketWithAuth(bi.Name, bi.Name, bi.Password)
if err != nil {
    fmt.Printf("Failed to connect to bucket %s %v", bi.Name, err)
    return
}
input := `{"v1":"Malicous"}`
err = cbbucket.Set("k1", 0, input)
if err != nil {
    fmt.Printf("set failed error %v", err)
    return
}

我假设,输入是攻击者可以操纵数据的点。但是,Couchbase中存储的是输入的无害(转义)版本。下面是DB中存储的值:

代码语言:javascript
复制
"{\"v1\":\"Malicous\"}"

通过查看encoding/json包,我了解到go可以使用interface{}动态解析通用JSON对象。因此,我修改了我的开发代码如下:

代码语言:javascript
复制
cbbucket, err = cbpool.GetBucketWithAuth(bi.Name, bi.Name, bi.Password)
if err != nil {
    fmt.Printf("Failed to connect to bucket %s %v", bi.Name, err)
    return
}
input := `{"v1":"Malicous"}`
b := []byte(input)
var f interface{}
err := json.Unmarshal(b, &f)
err = cbbucket.Set("k1", 0, &f)
if err != nil {
    fmt.Printf("set failed error %v", err)
    return
}

这一次成功地完成了利用。下面是存储在Couchbase中的恶意JSON对象:

代码语言:javascript
复制
{
  "v1": "Malicous"
}

嗯,这种开发并不那么令人兴奋……因为它确实需要开发人员盲目地解组用户输入并将其存储在数据库中。我想知道是否有其他更容易的开发技术,从字符串连接中派生出来,它不需要如此巨大的疏忽。

EN

回答 1

Stack Overflow用户

发布于 2015-08-13 02:38:12

对于像您这样通过键进行访问,Couchbase不会解析或验证写入数据库的值。这是一个应用程序端函数。只要值的格式是Couchbase Server能够理解的,它就会被写为该对象的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31970422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档