PHP.mk документација

Напади со инјектирање скрипти

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

mongodb.security.script_injection.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека mongodb.security.script_injection.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
Напади со инјектирање скрипти

Референца за `mongodb.security.script_injection.php` со подобрена типографија и навигација.

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 и исто така треба да се избегнува.

Белешки од корисници

Нема белешки од корисници за оваа страница.
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.