Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止网站上的PHP代码执行漏洞_Php_Mongodb - Fatal编程技术网

如何防止网站上的PHP代码执行漏洞

如何防止网站上的PHP代码执行漏洞,php,mongodb,Php,Mongodb,所以我遇到了一个问题,有人试图使用url执行php? 例如 ${@print(md5(123456789))} 据我所知,这将允许攻击者将自定义代码注入服务器端脚本引擎。当攻击者可以控制输入eval()函数调用的全部或部分输入字符串时,就会出现此漏洞。Eval将以代码形式执行参数。受此影响,攻击者可以在服务器上执行任何PHP代码 我正在使用mongoDB顺便说一句。我希望有人能帮助我,以防止任何输入这一点。 提前感谢您必须验证来自用户的每个输入数据 您可以使用mysql\u real\u esc

所以我遇到了一个问题,有人试图使用url执行php? 例如 ${@print(md5(123456789))}

据我所知,这将允许攻击者将自定义代码注入服务器端脚本引擎。当攻击者可以控制输入eval()函数调用的全部或部分输入字符串时,就会出现此漏洞。Eval将以代码形式执行参数。受此影响,攻击者可以在服务器上执行任何PHP代码

我正在使用mongoDB顺便说一句。我希望有人能帮助我,以防止任何输入这一点。
提前感谢

您必须验证来自用户的每个输入数据

您可以使用mysql\u real\u escape\u string函数对特殊字符进行转义

在使用关键字直接搜索之前使用搜索功能时,首先检查输入的关键字是否符合最低要求,就像您要搜索整数值的数据一样,但输入的值是文本,因此在这种情况下,与其直接搜索,不如验证输入的数据


无论如何,我们不能说一个站点100%安全,没有漏洞,我们必须降低漏洞的百分比。

不清楚您指的是使用PHP的
eval()
还是MongoDB的命令(也由调用)。如果是后者,您可以使用多种方法将PHP值传递到JavaScript中,同时仍然可以避免在JS代码中连接PHP值(例如,作为变量赋值)

eval
命令使用一个
args
选项,该选项允许您为已计算的函数提供参数。对于
MongoDB::execute()
命令包装器,这将是第二个参数。如果要使用对象定义JS函数(应该这样做),还可以使用
scope
constructor参数将PHP值绑定到JS上下文中的变量。与
eval
args
选项非常相似,这里的PHP值将被序列化为BSON,然后提供给JavaScript函数。除了布尔、数字和字符串之外,还可以传入数组、对象(真实对象或关联数组)和函数(通过在MongoCode对象中包装字符串)

以下脚本应演示如何将各种PHP值传递给每个调用方法:

$m = new MongoClient();

$values = [
    true,
    1.5,
    'foo',
    [1,2,3],
    (object) ['a' => 1],
    new MongoCode('function() {}'),
];

foreach ($values as $value) {
    $type = is_object($value) ? get_class($value) : gettype($value);
    printf("\nTesting PHP type: %s\n", $type);

    $rs = $m->test->command([
        'eval' => 'function(a){ return Array.isArray(a) ? "array" : typeof a; }',
        'args' => [$value],
    ]);

    printf("MongoDB::command() with code string and args: %s\n", $rs['retval']);

    $rs = $m->test->execute(
        new MongoCode('function(a){ return Array.isArray(a) ? "array" : typeof a; }'),
        [$value]
    );

    printf("MongoDB::execute() with MongoCode and args: %s\n", $rs['retval']);

    $rs = $m->test->execute(
        'function(a){ return Array.isArray(a) ? "array" : typeof a; }',
        [$value]
    );

    printf("MongoDB::execute() with code string and args: %s\n", $rs['retval']);

    $rs = $m->test->execute(
        new MongoCode('function(){ return Array.isArray(b) ? "array" : typeof b; }', ['b' => $value])
    );

    printf("MongoDB::execute() with MongoCode scope: %s\n", $rs['retval']);
}

好吧,你不能阻止人们尝试,但是你可以通过正确的保护措施轻松避免任何伤害。除非对未过滤的输入使用eval(),否则您发布的尝试是无害的。我的脚本中有一个eval函数。我使用的是mongodb。我有一个自定义javascript代码来处理查询。所以我很确定它会进入那里。您正在谈论的“保护”是什么?您在使用什么php
eval()
?请添加该代码,以便我们可以帮助您更好地发现漏洞。请参阅此问题。可能它会帮助您使用未初始化的输入来确定应用程序的行为,尤其是通过eval来确定,这将是一个愚蠢的错误。你必须犯这样的错误,PHP不会
mysql\u real\u escape\u string()
对MongoDB非常无用,它甚至不是SQL数据库。此外,验证不同于转义,这是应该做的