Какво е JSON инжектиране и как да го предотвратите?
JSON (JavaScript Object Notation)е отворен стандартен формат за обмен на данни, използван за комуникация между приложения. JSON е подобен на XML, но е по-лесен за четене от XML поради своята изключително лека природа (малък размер на файла).
JSON е извлечен от JavaScript – езикът за програмиране в мрежата и най-популярният в света. Това го прави предпочитаният формат за обмен на данни в интернет. Въпреки че много наподобява синтаксиса на обектния литерал на JavaScript, той може да се използва независимо от JavaScript и много среди за програмиране разполагат с възможност за четене (анализ) и генериране на JSON.
JSON съществува като низ - полезно, когато искате да предавате данни през мрежа. Въпреки това, той трябва да бъде преобразуван в собствен JavaScript обект, когато искате да получите достъп до данните. JavaScript предоставя глобален JSON обект с налични методи за преобразуване на собствен обект в низ (сериализация) и преобразуване на низ в естествен обект (десериализация). Низът JSON може да се съхранява в негов собствен файл – който по същество е само текстов файл с разширение .json и MIME тип приложение/json – което по същество е разширение на протокола за интернет имейл, което позволява на потребителите да обменят различни видове данни като изображения, аудио и видео файлове в интернет.
Много уеб приложения го използват, за да съхраняват важна информация и да комуникират помежду си. JSON често се третира като кеширани данни, когато се използва за съхраняване на данни и може потенциално да съдържа чувствителна информация. JSON често се използва заедно с RESTful API и AJAX приложения за предаване на чувствителна информация, като идентификационни данни за удостоверяване, когато се използват за изпращане на съобщения.
Широкото използване на JSON в уеб приложенията го прави мишена за злонамерени дейности. JSON сам по себе си не е голяма заплаха. В крайна сметка това е само формат за обмен на данни. Истинските опасения за сигурността на JSON възникват в начина, по който се използва. Ако се използват неправилно, приложенията, базирани на JSON, могат да станат уязвими за атаки като отвличане на JSON и инжектиране на JSON. Тази статия ще обсъди всичко за атаките с инжектиране на JSON, включително как да ги откриете и предотвратите.
Какво представлява JSON Injection Attack и как работи?
Атаките чрез инжектиране в уеб приложения са кибератаки, които се стремят да инжектират зловреден код в приложение, за да променят нормалното му изпълнение. Атаките чрез инжектиране могат да доведат до загуба на данни, модифициране на данни и отказ на услуга. В резултат на това той е посочен като риск номер едно за сигурността на уеб приложенията в Топ 10 на OWASP .
Инжектирането на JSON е типичен пример за атака чрез инжектиране, въпреки че не е толкова често и опасно, колкото другата форма на атака чрез инжектиране, като напр. SQL инжекция . Семантиката на JSON документи и изходни съобщения може да бъде значително променена, ако дадено приложение конструира JSON от ненадеждни или непроверени входни данни. Нападателят може да се възползва от вратичката, за да вмъкне злонамерени кодове, които могат да променят нормалното изпълнение на програмата. В някои случаи инжектирането на JSON може да доведе до Скриптове между сайтове или Динамична оценка на кода .
JSON традиционно се анализира с помощта на функция eval(), но това е несигурна практика. Всеки код, който използва eval() за десериализиране на JSON в JavaScript обект, е отворен за атаки чрез инжектиране на JSON.
Инжектирането на JSON се извършва, когато:
- Данните от ненадежден източник не се дезинфекцират от сървъра и се записват директно в JSON поток. Това се нарича JSON инжектиране от страна на сървъра.
- Данните от ненадежден източник не се дезинфекцират и анализират директно с помощта на функцията за оценка на JavaScript. Това се нарича JSON инжектиране от страна на клиента.
За да демонстрираме как работи атака с JSON инжектиране от страна на сървъра, нека разгледаме уеб приложение, което приема въвеждане на потребителско име и парола от потребители без дезинфекция. Данните, предоставени от потребителя (потребителско име, парола и тип акаунт), се съхраняват от страната на сървъра като JSON низ. JSON низът се формира с помощта на проста конкатенация, както е показано в кода по-долу:
|_+_|Тъй като приложението не дезинфекцира входните данни, злонамерен потребител е решил да добави неочаквани данни към своето потребителско име: |_+_|
Следователно полученият JSON низ става:
{ 'Акаунт':'потребител