Как безопасно использовать React.JS

Как безопасно использовать React.JS

25 марта 2022 г.

Интерфейсная веб-библиотека React оказала значительное влияние на процесс разработки приложений.


Важно помнить о некоторых передовых методах безопасности React JS при работе с React в реальных приложениях, даже несмотря на то, что обычно он считается очень безопасным.


Веб-приложения с хорошо продуманными и действующими решениями по обеспечению безопасности помогают организациям оставаться на высоте и строить доверительные отношения со своими потребителями. Решения в области безопасности помогают фирмам сохранить свой бренд и минимизировать потери, предотвращая утечку важных данных.


Отсутствие безопасности приложений может иметь долгосрочные последствия для некоторых предприятий. По оценкам, в 2020 году 87% компаний подверглись бы эксплойту уже известной существующей уязвимости.


Часто разработчики считают, что React обеспечит бесспорную безопасность их приложений. Это не всегда лучший вариант. В этих вещах невозможно ошибиться, как и во всем остальном в жизни.


Уязвимости в React.js могут возникнуть, если вы считаете, что используете защитные функции библиотеки. Крайне важно помнить, что React может и не может сделать для вас. Крайне важно следовать некоторым рекомендациям по безопасности, чтобы избежать распространенных ошибок безопасности. В этой статье мы рассмотрим некоторые из лучших методов обеспечения безопасности React.js, которые вы можете использовать в своих проектах.


Наша цель — обсудить наиболее распространенные уязвимости React, как их выявить во время проверки кода и как их смягчить.


Популярность React.js и почему мы его выбираем


Для разработки динамических и интерактивных пользовательских интерфейсов известна библиотека React. Facebook, BBC, Instagram, WhatsApp и Netflix — лишь некоторые из известных организаций, которые используют эту коллекцию.


Статистика показывает, что React.js — одна из самых популярных платформ в поиске Google, и популярность этой технологии продолжает расти. Ему доверяют крупные, известные корпорации и платформы. Если вы используете React 16.8, вы можете использовать его без создания отдельного класса, потому что у него есть дополнительные функции.


Aelius Venture использует разработку React.js для создания отличных пользовательских интерфейсов и одностраничных приложений для различных веб-приложений и мобильных приложений. С помощью React веб-разработчики могут создавать масштабные приложения, использующие динамические данные и не требующие перезагрузки страницы для работы. Масштабируемость, скорость и простота использования являются целями этой системы.


В приложениях React обрабатывает просто пользовательский интерфейс. Вы можете использовать это в сочетании с другими библиотеками JavaScript или огромными фреймворками MVC, поскольку они соответствуют видам в шаблоне Model View Controller.


Чаще всего он используется с другими библиотеками пользовательского интерфейса React, такими как Redux, в качестве библиотеки пользовательского интерфейса React.


Пользователи экосистемы React.js могут воспользоваться множеством преимуществ, в том числе следующими:


  • Компоненты, которые можно использовать повторно

  • Синхронизация состояния приложения и интерфейса

  • Система маршрутизации и шаблонизации

При разработке фронтенд-задач наши разработчики в значительной степени полагаются на функциональные возможности React.js. Инструмент довольно мощный, но при этом чрезвычайно простой в использовании.


В чем преимущества безопасности React.js?


Для предприятий, которые сильно зависят от React.js, опасности и последствия атаки или нарушения безопасности неизбежны. Веб-платформа и SPA (одностраничное приложение) Разработка приложений React связывает ваш бизнес со многими типами информации. С ним ваша компания сможет конкурировать на рынке.


Тот факт, что два из каждых трех приложений имеют слабые места в системе безопасности, указывает на то, что разработчики иногда упускают из виду серьезность таких проблем и пренебрегают стандартами безопасности.


Веб-приложения часто страдают от проблем с безопасностью, в том числе следующих:


1. Межсайтовый скриптинг


Это слабость клиента, которая может привести к серьезным проблемам. Атаки с использованием межсайтового скриптинга (XSS) происходят, когда злоумышленнику удается обманным путем заставить посетителей веб-сайта запускать код JavaScript на своих компьютерах.


  • Зеркальные XSS-атаки могут осуществляться через ссылки, содержащие текстовую информацию, которая преобразуется браузером в код. Например, это может быть поле в форме, которое требует пользовательского запроса.

  • Можно запустить сохраненную XSS-атаку, когда злоумышленник получает доступ к серверу, и код, работающий на этом сервере, способен генерировать информацию, которую можно отобразить на веб-странице клиента. – Загрузка комментариев и фотографий на серверы – распространенный способ таких нападений.

Хорошим примером является червь Samy, который воспользовался уязвимостью MySpace XSS. Что касается вирусов, то он был одним из самых быстро распространяющихся за всю историю.


импортировать React, {useState} из 'реакции';


импортировать createDOMPurify из ‘dompurify’;


приложение() {


const [текст, setText] = useState('');


функция updateText(e) {


setText(e.target.value);


вернуть (


<дел>


<input onChange={updateText} type="text" value={text} />


<divhazardlySetInnerHTML= {{__html: createDOMPurify(text)}}/>


</div>


экспорт приложения по умолчанию;


2. SQL-инъекция


Используя уязвимости SQL-инъекций, злоумышленники могут извлекать, изменять или удалять данные независимо от прав первоначального пользователя.


В зависимости от того, насколько успешной будет атака путем внедрения, она может подделать учетные данные, сгенерировать новые учетные данные с правами администратора и получить доступ ко всем данным на сервере. Внедрение SQL на основе ошибок, внедрение SQL на основе логических ошибок и внедрение SQL на основе времени — все это примеры внедрения SQL.


3. Случайность и связи ненадежны


Разработчики, работающие над веб-сайтами, должны знать, что если содержимое ссылки зависит от ввода пользователя, злоумышленник может начать внедрять вредоносный код в JavaScript. Пользователь выполнит сценарий злоумышленника, если нажмет на эту ссылку.


С этой проблемой сталкиваются не только проекты React; тем не менее, решение варьируется в зависимости от приложения. Возможно, вам также придется внести изменения в сервер. Предполагается, что в ссылках используется протокол из белого списка (например, HTTP:), а объекты HTML проверяются.


Ссылки — не единственный тип объекта, который можно использовать таким образом. Однако с приложениями React они являются наиболее вероятной целью атаки. Если злоумышленник имеет контроль над значением URI (унифицированного идентификатора ресурса) элемента, он может быть уязвим для этой атаки.


4. Исходное состояние сервера, контролируемое злоумышленником


Эта уязвимость может возникнуть при рендеринге приложения на стороне сервера.


Есть много разных способов сделать его вредным для страницы, в зависимости от того, какую версию вы используете. Разработчик может создать переменную документа из строки JSON при создании начального состояния страницы.


Ниже приведены примеры того, как может выглядеть уязвимость:


<script>window.__STATE__ = ${JSON.stringify({ data })}</script>


Поскольку JSON.stringify() может преобразовывать любые переданные ему данные в строку (при условии, что передаваемые данные JSON действительны), и это то, что мы видим на странице, это может быть опасно.


В серверных проектах React с Redux это обычная тенденция. На GitHub есть множество руководств и примеров, которые помогут вам начать работу с Redux в кратчайшие сроки.


5. Выполнение случайного кода


Если злоумышленник может выполнять произвольные команды или код в целевом процессе, это называется выполнением произвольного кода (ACE). Дыра в системе безопасности программного или аппаратного обеспечения, позволяющая выполнять произвольный код, называется уязвимостью, связанной с выполнением произвольного кода.


Уязвимостью этого типа можно воспользоваться, используя приложение, называемое атакой с выполнением произвольного кода. Когда подобная уязвимость обнаруживается в широко используемом общедоступном продукте (например, в ОС Windows), она представляет серьезную угрозу для всех, кто использует этот продукт (из-за этого типа уязвимости распространилась вспышка программы-вымогателя WannaCry).


6. Zip Slip — запись файлов на основе архива


Перезапись произвольных файлов в сочетании с атакой обхода каталога, которая может осуществляться при извлечении файлов из архивов, лежит в основе проблемы Zip Slip.


Zip Slip можно использовать, загрузив определенный архив, содержащий имена файлов, необходимые для обхода каталогов. Если для распаковки такого архива используется уязвимая библиотека, злоумышленник в конечном итоге сможет распаковать вредоносные файлы за пределы указанного каталога.


В этой ситуации злоумышленник может заменить критически важные системные или исполняемые файлы, файлы конфигурации и другие файлы. В конечном итоге это приведет к выполнению произвольного кода из удаленного места.


Рекомендации по безопасности React.JS


Легче найти лекарство и защититься от известного врага, если вы знаете самые распространенные уязвимости React.


Вы должны уделить особое внимание созданию всего веб-сайта, включая ваше веб-приложение, настройки веб-сервера, создание и изменение паролей и код на стороне клиента, для успешной защиты приложения.


Учитывая вышеупомянутые проблемы React и ресурсы безопасности React, мы обсудим с вами некоторые из наиболее распространенных и простых методов, которые вы можете использовать для защиты своего приложения React.js.


  • Удалите или отключите любую разметку, которая потенциально может включать инструкции по запуску кода в качестве защиты от уязвимостей XSS. Сюда входят элементы HTML, такие как script>, object>, embed> и link>.

  • Jscrambler — это инструмент, защищающий исходный код React.js.

  • Приложения React Native должны быть безопасными. Поскольку React Native является предпочтительной средой для кроссплатформенной мобильной разработки, разработчикам следует изучить решения для защиты приложений React Native.

  • Используйте React для реализации тайм-аута простоя.

  • Используйте библиотеки фрагментов, такие как ES7 React, Redux и JS Snippets, среди прочих. Они добавят дополнительную безопасность и обеспечат отсутствие ошибок в вашем коде.

  • Установите вредоносный блокировщик трафика, чтобы предотвратить несанкционированный доступ к внутреннему коду программы.

  • Проблемы с внедрением скриптов в приложениях React.js могут быть использованы.

  • Используйте метод открытия пользовательских URL-адресов в новых вкладках браузера, чтобы защитить себя от небезопасных ссылок.

  • В идеале код будет работать так, как ожидается, и его будет легко протестировать перед запуском. В ваших тестовых файлах следует использовать суффикс .test, чтобы отличить их от исходных файлов.

  • Используйте NPM-модуль serialize-javascript, чтобы избежать вывода JSON.

  • Во время и после процесса разработки сканируйте все приложение React на наличие всех типов DDoS-атак.

  • Используя приложение React, проверьте работу каждого компонента, а также всего вашего приложения после его отображения в браузере.

Заключение


Информация, содержащаяся в этом блоге, будет полезна как разработчикам ReactJS, так и разработчикам внешнего интерфейса, которые хотят узнать больше о ReactJS, включая его работу, безопасность, разработку компонентов и разработку приложений.


У вас будет меньше возможностей для набора текста и более явный код, если вы будете использовать лучшие практики React. Поработав с ним какое-то время, вы оцените его чистые и четкие функции, такие как повторное использование кода, расширенные компоненты реагирования и возможность добавления отдельной переменной состояния.


Используя список лучших практик React, вы сможете правильно начать свои проекты и избежать проблем в будущем.


Первоначально опубликовано [здесь] (https://www.aeliusventure.com/react-js-security-and-best-practices-guide/)


Оставаться на связи!



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE