php mongodb的防注入

本文探讨了在使用MongoDB时如何防范注入攻击,并提供了一个检查函数来确保输入的安全性。通过识别并排除特定的关键字,代码示例展示了如何在实际项目中应用这些策略,以增强系统的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在还没有阅读:http://drops.wooyun.org/tips/3939这篇文章的时候,天真的以为不会发生注入的问题。事实狠狠扇了我一巴掌。记住任何时候用户的输入都不要相信。刚好项目中有使用mongodb,那就赶紧亡羊补牢吧。代码是简单了一点。还希望各位大牛多多指点。

/**
 * 检查变量类型和是否含有mongo关键字
 *
 * @param mixed $var 需要检查的变量
 * @param mixed $type 变量的类型
 * @param bool $multi 是否是多维数组
 * @return bool
 */
function checkIsSafeStr ($var, $type = 'string', $multi = FALSE)
{
    $type = is_array($type) ? array_map('strtolower', $type) : array(strtolower($type));

    //针对mongo注入做关键字检查
    $check = function ($string) {
        $banStrings = array('{', '}', '$ne', '$gte', '$gt', '$lt', '$lte', '$in', '$nin', '$exists', '$where', 'tojson', '==', 'db.');
        foreach ($banStrings as $str) {
            if (FALSE !== strpos(strtolower($string), $str)) {
                return FALSE;
            }
        }

        return TRUE;
    };
    if (is_array($var) && in_array('array', $type)) {
        foreach ($var as $name => $val) {
            if (!$check($name))
                return FALSE;

            if (FALSE === $multi && is_array($val)) {
                return FALSE;
            } else if (!self::checkIsSafeStr($val, $type, $multi)) {
                return FALSE;
            }
        }
        return TRUE;
    } else {
        $varType = strtolower(gettype($var));
        //先对类型检查
        if (!in_array($varType, $type)) {
            return FALSE;
        }

        return $check($var);
    }
}

更多关于可以到:

http://drops.wooyun.org/papers/850

http://webcache.googleusercontent.com/search?q=cache:fPNiwObqKcEJ:hi.baidu.com/d4rkwind/item/ad7b81efb799ce2e6dabb8c3+&cd=1&hl=zh-CN&ct=clnk&gl=cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值