php 怎么进入mongodb

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 怎么进入mongodb相关的知识,希望对你有一定的参考价值。

    在Linux、window、Mac平台上安装MongoDB扩展

    Linux上安装 MongoDB php扩展

    在终端上安装

    可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动

  $ sudo pecl install mongo

  使用php的pecl安装命令必须保证网络连接可用以及root权限。

  安装手册

  如果想通过源码来编译扩展驱动。必须手动编译源码包,这样做的好是最新修正的bug包含在源码包中。

  可以在Github上下载MongoDB PHP驱动包。访问github网站然后搜索"mongo php driver"(下载地址:https://github.com/mongodb/mongo-php-driver),下载该源码包,然后执行以下命令:

  $ tar zxvf mongodb-mongodb-php-driver-<commit_id>.tar.gz
       $ cd mongodb-mongodb-php-driver-<commit_id>
       $ phpize
       $ ./configure
       $ sudo make install

  如果php是编译的,则安装方法如下(假设是编译在/usr/local/php目录中):

  $ tar zxvf mongodb-mongodb-php-driver-<commit_id>.tar.gz
       $ cd mongodb-mongodb-php-driver-<commit_id>
       $ /usr/local/php/bin/phpize
       $ ./configure --with-php-config=/usr/local/php/bin/php-config
       $ sudo make install

  执行以上命令后,你需要修改php.ini文件,在php.ini文件中添加mongo配置,配置如下:

  extension=mongo.so

  注意:你需要指明 extension_dir 配置项的路径。

    window上安装 MongoDB PHP扩展

  Github上已经提供了用于window平台的预编译php mongodb驱动二进制包(下载地址:https://s3.amazonaws.com/drivers.mongodb.org/php/index.html),可以下载与php对应的版本,但是需要注意以下几点问题:

  VC6 是运行于 Apache 服务器

  \'Thread safe\'(线程安全)是运行在Apache上以模块的PHP上,如果以CGI的模式运行PHP,请选择非线程安全模式(\' non-thread safe\')。

  VC9是运行于 IIS 服务器上。

  下载完需要的二进制包后,解压压缩包,将\'php_mongo.dll\'文件添加到PHP扩展目录中(ext)。ext目录通常在PHP安装目录下的ext目录。

  打开php配置文件 php.ini 添加以下配置:

  extension=php_mongo.dll

  重启服务器。

  通过浏览器访问phpinfo,如果安装成功,就会看到类型以下的信息:

    MAC中安装MongoDB PHP扩展驱动

  你可以使用\'autoconf\'安装MongoDB PHP扩展驱动。

  你可以使用\'Xcode\'安装MongoDB PHP扩展驱动。

  如果使用 XAMPP,可以使用以下命令安装MongoDB PHP扩展驱动:

  sudo /Applications/XAMPP/xamppfiles/bin/pecl install mongo

  如果以上命令在XMPP或者MAMP中不起作用,需要在Github上下载兼容的预编译包。

  然后添加 \'extension=mongo.so\'配置到php.ini文件中。

参考技术A 1.首先下载php的mongodb扩展

2.解压安装包

tar zxf mongo-1.4.5.tgz

3.进入解压目录,运行phpize进行安装准备

cd mongo-1.4.5
/usr/local/php/bin/phpize

4.安装编译
上述命令运行完后,在目录下就生成了configure文件
使用./configure命令进行安装配置,然后使用make && make install进行编译安装,命令如下:

./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

5.编辑php.ini增加下述一行添加mongodb扩展

extension=mongo.so

重启web容器,然后查看phpinfo,看到mongodb的内容就说明安装成功。本回答被提问者和网友采纳

MongoDB+php7搭建

0x00前言:

今天一位非计算机专业的朋友问我怎么打开.bson文件,我第一反应.bson文件是什么,网上查了下是mongodb的传输文件。也就是类似于mysql的.sql文件一样

之前看过mongodb的注入,但是没有亲自实践,这次一并从环境搭建开始学习了波mongodb

 

0x01 mongodb是什么:

mongodb和mysql等数据库管理软件作用一样,就是用来存放数据的

mongodb与mysql,mssql等数据库不同在于,它不是关系数据库,而是一种集合中包含键值对形式存放数据的管理软件

关系数据库结构一般是:库,表,字段,每一行数据是个组元

非关系数据库以这里的mongodb为例结构是:库,集合,键值对

 

0x02 搭建mongodb+php:

我搭建的环境是ubuntu 16.04,事先已经装好了php+apache2+mysql

那么要搭建mongodb和php之间通信,可以简单来概括为两步:安装mongodb,配置php的mongodb模块

安装mongodb

apt-get install mongodb

安装好可以直接在本地连接

技术图片

这里简单说下基础操作语句

查询数据库

show dbs;

技术图片

进入数据库(如果目标不存在,就是创建个新的数据库,但是要写入才能show得出来)

use sijidou;            //创建库
db.createCollection(‘siji‘);  //创建集合

技术图片

查看集合

show collections;

 技术图片

给某个集合内添加数据,插入的语句类似于json的格式

db.siji.insert({id:1,name:‘sijidou‘,age:‘18‘})

技术图片

查看某个集合的内容

db.siji.find()

技术图片

安装php-mongodb模块

apt-get install php-mongodb

重启apache,在phpinfo中就可以看到mongodb模块的信息了(刚装好可能下面的信息不一样,但是有这一个大栏就行)

技术图片

php7与php其他版本运行mongodb的方式不同,php5的格式可以参照

http://www.runoob.com/mongodb/mongodb-php.html

但是安装的步骤可能和我上面讲的不同

php7的格式为,这里以最简单的查询语句为例

<?php
$manager = new MongoDB\\Driver\\Manager("mongodb://localhost:27017");  

//设置过滤规则,有点类似mysql的where
$filter = [];
//设置操作
$options = [];
//生成查询对象
$query = new MongoDB\\Driver\\Query($filter, $options);
//对相应的 sijidou库 的siji集合 进行查询
$cursor = $manager->executeQuery(‘sijidou.siji‘, $query); foreach($cursor as $result){
  print_r($result);   
  echo "<br>";
}
?>

 但是运行的时候可能会出现以下问题

php7 erver at localhost:27017 reports wire version 2, but this version of libmongoc requires at least 3 (MongoDB 3.0)

这个原因是mongodb的版本是2,但是php要求至少要3以上的

遇到这个问题升级mongodb数据库,步骤如下

 

导入包管理系统所需要的key

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

为mongodb创建个apt-get的列表

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

更新本地包

sudo apt-get update

升级安装

sudo apt-get install -y mongodb-org

 

但是在这种情况下又会遇到,服务启动不了的情况

Failed to start mongodb.service: Unit mongodb.service is masked.

依次执行以下步骤

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair --dbpath /var/lib/mongodb
sudo mongod --fork --logpath /var/lib/mongodb/mongodb.log --dbpath /var/lib/mongodb 
sudo service mongodb start

 

环境差不多就搭建完成了,接下来添加几组数据并测试一下

技术图片

如果要导入.bson文件的话

mongorestore -d 库名 文件路径
mongorestore -d csh ./articles.bson

 

0x03 MongoDB注入?

首先修改下源码,并模拟添加个flag集合

技术图片

<?php
$name = $_GET[‘name‘];
$manager = new MongoDB\\Driver\\Manager("mongodb://localhost:27017");

$filter = [‘name‘ => $name];
$options = [];

$query = new MongoDB\\Driver\\Query($filter, $options);
$result = $manager->executeQuery(‘sijidou.siji‘ ,$query);

foreach($result as $ans){
    print_r($ans);
}

?>

这里的filter的内容表示 name =$name的值,效果如下

技术图片

 

 然后我们可以用name[$ne]=sijidou显示不是sijidou的值

技术图片

其他的方法:

$gt   -- ‘>‘
$lt    -- ‘<‘
$ne   -- ‘!=‘
$eq   -- ‘=‘
$gte  -- ‘>=‘
$lte   -- ‘<=‘

但是看了网上的mongodb注入方式,发现没有php7的,都是php5

php5的查询语句可以是这样的

$query = "var data = db.sijidou.findOne({name:‘$username‘});return data;";
//调用
$mongo = new mongoclient();
$db = $mongo->sijidou;
$data = $db->execute($query);

$query的内容是整个js代码字符串,那么就可以操作了

比如 username的内容为

sijidou‘}); return version();var data2 = db.sijidou.findOne({name:‘sijidou

拼接后,执行了3条语句,其中version()就是目标值

var data = db.sijidou.findOne({name:‘sijidou‘}); return version();var data2 = db.sijidou.findOne({name:‘sijidou‘});return data;

防御方法:addslashes()转义

但是但是但是!!!

这个在php5中查询MongoDB和mysql一样是整句语句,而php7是用filter和options,所以没法这么注入,我也没找到啥好的方法

至于php7中的,name[$ne]=sijidou,这种返回其他的值的情况,可以使用下面方法避免

技术图片

name[$ne]=sijidou,不会返回结果了

技术图片

因此这个小测试也拿不到flag

 

0xFF 结语

总得来说,php7比php5使用MongoDB更加麻烦一点,但是更加安全

参考链接

https://blog.csdn.net/jws2011520/article/details/78157778

https://www.centos.bz/2017/11/mongodb%E4%B8%A4%E4%B8%AA%E6%8A%A5%E9%94%99%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/

https://www.cnblogs.com/mrchang/p/6255226.html

https://cl0und.github.io/2018/01/12/MONGODB%E6%B3%A8%E5%85%A5%E5%AD%A6%E4%B9%A0/

以上是关于php 怎么进入mongodb的主要内容,如果未能解决你的问题,请参考以下文章

mongodbmongodb提升

MongoDBMongodb——GridFS存储

mongoDBmongoDB副本集实战

MongoDBmongodb设置用户访问权限

MongodbMongodb复制和分片

MongoDBMongoDB的安装教程