Атака Π·Π° допомогою Ρ–Π½'Ρ”ΠΊΡ†Ρ–ΠΉ Ρƒ скриптах

Π―ΠΊΡ‰ΠΎ Π²ΠΈ використовуєтС JavaScript, пСрСконайтСся, Ρ‰ΠΎ всі Π·ΠΌΡ–Π½Π½Ρ–, які ΠΏΠ΅Ρ€Π΅Ρ‚ΠΈΠ½Π°ΡŽΡ‚ΡŒ ΠΊΠΎΡ€Π΄ΠΎΠ½ PHP-JavaScript, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Π΅ scope MongoDB\BSON\Javascript, Π° Π½Π΅ Ρ–Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡƒΡŽΡ‚ΡŒΡΡ Ρƒ рядок JavaScript. Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ ΠΏΡ–Π΄ час використання ΠΏΡ€ΠΎΠΏΠΎΠ·ΠΈΡ†Ρ–ΠΉ $where Ρƒ Π·Π°ΠΏΠΈΡ‚Π°Ρ…, ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… mapReduce Ρ‚Π° group, Π° Ρ‚Π°ΠΊΠΎΠΆ Ρƒ Π±ΡƒΠ΄ΡŒ-який Ρ–Π½ΡˆΠΈΠΉ час, ΠΊΠΎΠ»ΠΈ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ JavaScript Π΄ΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½ΠΈΡ….

Наприклад, припустимо, Ρ‰ΠΎ ΠΌΠΈ ΠΌΠ°Ρ”ΠΌΠΎ дСякий JavaScript, Ρ‰ΠΎΠ± Π²Ρ–Ρ‚Π°Ρ‚ΠΈ користувача Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ… Π±Π°Π·ΠΈ Π΄Π°Π½ΠΈΡ…. Ми ΠΌΠΎΠ³Π»ΠΈ Π± Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ:

Loading...

Однак Ρ‰ΠΎ, якщо зловмисник ΠΏΠ΅Ρ€Π΅Π΄Π°ΡΡ‚ΡŒ JavaScript?

Loading...

Π’Π΅ΠΏΠ΅Ρ€ MongoDB Π²ΠΈΠΊΠΎΠ½Π°Ρ” рядок JavaScript "print('ΠŸΡ€ΠΈΠ²Ρ–Ρ‚, '); db.users.drop(); print('!');". Цю Π°Ρ‚Π°ΠΊΡƒ Π»Π΅Π³ΠΊΠΎ ΡƒΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ: використовуйтС args для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρ– Π·ΠΌΡ–Π½Π½ΠΈΡ… Π· PHP Π΄ΠΎ JavaScript:

Loading...

Π¦Π΅ Π΄ΠΎΠ΄Π°Ρ” Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ JavaScript, яка Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ як Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— greet. Π’Π΅ΠΏΠ΅Ρ€, якщо Ρ…Ρ‚ΠΎΡΡŒ спробує надіслати ΡˆΠΊΡ–Π΄Π»ΠΈΠ²ΠΈΠΉ ΠΊΠΎΠ΄, MongoDB Π½Π°Π΄Ρ€ΡƒΠΊΡƒΡ” Π½Π΅ΡˆΠΊΡ–Π΄Π»ΠΈΠ²ΠΎ Вітання, '); db.dropDatabase(); print('!

Використання Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ–Π² Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°Ρ” Π·Π°ΠΏΠΎΠ±Ρ–Π³Ρ‚ΠΈ виконанню ΡˆΠΊΡ–Π΄Π»ΠΈΠ²ΠΎΠ³ΠΎ ввСдСння базою Π΄Π°Π½ΠΈΡ…. Π’ΠΈΠΌ Π½Π΅ мСнш, Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– пСрСконатися, Ρ‰ΠΎ ваш ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½Π΅Ρ‚ΡŒΡΡ Ρ– всС ΠΎΠ΄Π½ΠΎ Π²ΠΈΠΊΠΎΠ½Π°Ρ” ввСдСння! НайкращС ΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΈ виконання Π±ΡƒΠ΄ΡŒ-якогоJavaScript Π½Π° сСрвСрС.

Настійно Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡ”Ρ‚ΡŒΡΡ ΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΈ рСчСння » $where clause Ρ–Π· Π·Π°ΠΏΠΈΡ‚Π°ΠΌΠΈ, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρ†Π΅ суттєво Π²ΠΏΠ»ΠΈΠ²Π°Ρ” Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ. По моТливості використовуйтС Π°Π±ΠΎ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Ρ– ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π·Π°ΠΏΠΈΡ‚Ρ–Π², Π°Π±ΠΎ » Aggregation Framework

Π―ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° » MapReduce, Ρ‰ΠΎ використовує JavaScript, Ρ€ΠΎΠ·Π³Π»ΡΠ½ΡŒΡ‚Π΅ ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ використання » Aggregation Framework. На Π²Ρ–Π΄ΠΌΡ–Π½Ρƒ Π²Ρ–Π΄ Map/Reduce, Π²Ρ–Π½ використовує Ρ–Π΄Ρ–ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈΠΉ ΠΌΠΎΠ²Ρƒ для ΠΏΠΎΠ±ΡƒΠ΄ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡ‚Ρ–Π², Π±Π΅Π· нСобхідності писати Ρ‚Π° використовувати ΠΏΠΎΠ²Ρ–Π»ΡŒΠ½Ρ–ΡˆΠΈΠΉ ΠΏΡ–Π΄Ρ…Ρ–Π΄ JavaScript, який ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΈΠΉ для Map/Reduce.

Команда» eval застаріла Π· MongoDB 3.0, Ρ– Ρ—Ρ— слід ΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΈ.