如何防止站点上的PHP代码执行漏洞
所以我遇到了一个问题,有人试图使用url执行php?例如, 。 http://example.com/search.php?keyword=关于我读到的内容,{{@ print(md5(123456789))}如何防止站点上的PHP代码执行漏洞
这将允许攻击者将自定义代码注入服务器端脚本引擎。当攻击者可以控制输入到eval()函数调用的全部或部分输入字符串时,会发生此漏洞。 Eval将以代码形式执行参数。这个攻击者的影响可以在你的服务器上执行任何PHP代码。
我使用mongoDB顺便说一句。我很想有人帮助我阻止任何输入。 在此先感谢
您必须验证来自用户的每个输入数据。
您可以使用mysql_real_escape_string功能,特殊字符转义,
,虽然来之前与关键字直接搜索到搜索功能,首先检查输入的关键词是否符合最低要求,比如你要搜索的数据整数值,但输入的值是一个文本,所以在这种情况下,而不是直接搜索,最好验证输入的数据。
无论如何,我们不能说一个网站是100%安全的漏洞,我们必须减少漏洞的百分比。
'mysql_real_escape_string()'对于MongoDB来说非常没用,它甚至不是SQL数据库。此外,验证是不同于_escaping_,这是什么应该做 –
你是正确的。有些人需要正确阅读。 –
目前还不清楚您是指使用PHP的eval()
还是MongoDB的eval
命令(也可以通过MongoDB::execute()
调用)。如果是后者,则可以通过多种方法将PHP值传递到JavaScript中,同时避免需要在JS代码中连接它(例如作为变量赋值)
eval
命令采用args
选项,该选项允许您为评估函数提供参数。对于MongoDB::execute()
命令包装器,这将是第二个参数。如果您使用MongoCode对象定义JS函数,您应该也可以使用构造函数参数scope
将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()'?请添加该代码,以便我们更好地帮助您发现漏洞。 –