前言
前不久比赛遇到了,比较老套,但是还是打算学习一下,就当了解一下MongoDB,记录为主,后面遇到了再补
MongoDB
NoSQL(NoSQL = Not Only SQL ),指的是非关系型的数据库。是对不同于传统的关系型数据库的数据库管理系统的统称。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
MongoDB 是一个基于文档的 NoSQL 数据库,数据以 BSON(Binary JSON) 格式存储在数据库中,BSON 是二进制编码的 JSON 扩展,数据结构由键值(key=>value)对组成。
MongoDB基础语法
结构
数据库(Database):存储数据的容器
集合(Collection):数据库中的一个集合
文档(Document): 集合中的一个数据记录
1 | { |
执行操作
MongoDB不同于关系数据库不是用语句来增删改查,而是通过类似于函数的方式,将执行和数据分离,天然具有预编程的特性,所以利用方式有一点的局限性
1 | db.myCollection.find( |
MongoDB 查询文档
- 使用比较操作符
1
2
3
4
5
6
7{"username": {"$ne": "foo"}, "password": {"$ne": "bar"} }
$lt <
$lte <=
$gt >
$gte >=
$ne != - 使用逻辑操作符
就是逻辑条件里的与或非1
{username: 'weiyi', $or:[{}, {'a':'a', password: ''}] }
- 正则
{ name: /^A/ }
{"username": {"$eq": "admin"}, "password": {"$regex": "^m" }}
利用手法
PHP数组注入
php有使用数组的方式而非字符串拼接的方式构造语句我们就可以利用这个特性往数组的键名传递一个操作符(大于,小于,等于,不等于等等),从而达到利用的目的:1
2
3
4
5$data = array(
'username'=>$username,
'password'=>$password
);
$data = $coll->find($data);?username[$ne]=1&password[$ne]=1
直接拼接造成的注入
1 | String stringQuery = "{ 'username' : '" + name + "', 'password' : '" + password + "'}"; |
1 | mylist = "abcdefghijklmnopqrstuvwxyz0123456789" |