W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
如果您使用的是 JavaScript,請(qǐng)確保任何跨越 PHP 的變量 - to-JavaScript 邊界在 MongoDB\BSON\Javascript 字段中傳遞,而不是插值到 JavaScript 字符串。在查詢(xún)、mapReduce 和 group 命令中使用子句時(shí),以及您可能在任何其他時(shí)候都會(huì)出現(xiàn)這種情況 將 JavaScript 傳遞到數(shù)據(jù)庫(kù)中。scope$where
例如,假設(shè)我們有一些 JavaScript 來(lái)問(wèn)候數(shù)據(jù)庫(kù)中的用戶(hù) 原木。我們可以做到:
<?php
$m = new MongoDB\Driver\Manager;
// Don't do this!!!
$username = $_GET['field'];
$cmd = new \MongoDB\Driver\Command( [
'eval' => "print('Hello, $username!');"
] );
$r = $m->executeCommand( 'dramio', $cmd );
?>
但是,如果惡意用戶(hù)傳入一些 JavaScript 怎么辦?
<?php
$m = new MongoDB\Driver\Manager;
// Don't do this!!!
$username = $_GET['field'];
// $username is set to "'); db.users.drop(); print('"
$cmd = new \MongoDB\Driver\Command( [
'eval' => "print('Hello, $username!');"
] );
$r = $m->executeCommand( 'dramio', $cmd );
?>
現(xiàn)在 MongoDB 執(zhí)行 JavaScript 字符串。 這種攻擊很容易避免:用來(lái)傳球 從 PHP 到 JavaScript 的變量:"print('Hello, '); db.users.drop(); print('!');"
args
<?php
$m = new MongoDB\Driver\Manager;
$_GET['field'] = 'derick';
$args = [ $_GET['field'] ];
$cmd = new \MongoDB\Driver\Command( [
'eval' => "function greet(username) { print('Hello, ' + username + '!'); }",
'args' => $args,
] );
$r = $m->executeCommand( 'dramio', $cmd );
?>
這會(huì)向 JavaScript 作用域添加一個(gè)參數(shù),該參數(shù)將用作參數(shù) 對(duì)于函數(shù)?,F(xiàn)在如果 有人試圖發(fā)送惡意代碼,MongoDB會(huì)無(wú)害地打印。greetHello, '); db.dropDatabase(); print('!
使用參數(shù)有助于防止惡意輸入被 數(shù)據(jù)庫(kù)。但是,您必須確保代碼不會(huì)轉(zhuǎn)過(guò)來(lái) 并執(zhí)行輸入!最好首先避免在服務(wù)器上執(zhí)行任何 JavaScript。
強(qiáng)烈建議您遠(yuǎn)離 ? $where 子句,因?yàn)樗鼤?huì)顯著影響性能。哪里 可能,使用普通查詢(xún)運(yùn)算符或 ? 聚合 框架。
作為 ? MapReduce 的替代品,它使用 JavaScript,請(qǐng)考慮使用 ? 聚合 框架。與 Map/Reduce 不同,它使用慣用語(yǔ)言來(lái) 構(gòu)造查詢(xún),而無(wú)需編寫(xiě)和使用速度較慢的 JavaScript Map/Reduce所需的方法。
自 MongoDB 3.0 以來(lái),不推薦使用 ? eval 命令,也應(yīng)避免使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: