Напади со инјектирање скрипти
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Напади со инјектирање скрипти
Референца за `mongodb.security.script_injection.php` со подобрена типографија и навигација.
Напади со инјектирање скрипти
Ако користите JavaScript, проверете дали сите променливи што поминуваат од PHP до JavaScript се предаваат во scope Ако користите JavaScript, проверете дали сите променливи што ја преминуваат границата PHP- до-JavaScript се поминуваат во
MongoDB\BSON\Javascriptполе од $where
, а не се интерполираат во низата JavaScript. Ова може да се појави при користење
клаузули во прашања, команди mapReduce и group, и секое друго време кога може да поминете JavaScript во базата на податоци.
<?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 );
?>На пример, да претпоставиме дека имаме некој 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 );
?>
Но, што ако злонамерен корисник помине некој JavaScript?
"print('Hello, '); db.users.drop(); print('!');"Сега MongoDB ја извршува низата JavaScript 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 );
?>
за поминување променливи од PHP до JavaScript: greet Ова додава аргумент во опсегот на JavaScript, кој се користи како аргумент за
Hello, '); db.dropDatabase(); print('!.
функција. Сега ако некој се обиде да испрати злонамерен код, MongoDB незлонамерно ќе го испечати any Користењето аргументи помага да се спречи злонамерен влез да биде извршен од базата на податоци. Сепак, мора да се уверите дека вашиот код нема да го изврши влезот на друг начин! Најдобро е да се избегне извршување
JavaScript на серверот на прво место. » $where clause Силно се препорачува да се држите подалеку од со прашања, бидејќи тоа значително влијае на перформансите. Каде што е можно, користете нормални оператори за прашања или.
» Агрегациски Фрејмворк Како алтернатива на» MapReduce со прашања, бидејќи тоа значително влијае на перформансите. Каде што е можно, користете нормални оператори за прашања или, кој користи JavaScript, размислете да го користите
На » eval командата е отпишана од MongoDB 3.0 и исто така треба да се избегнува.