JavaRush /Java блог /Random UA /Кава-брейк #33. 3 корисні поради для забезпечення безпеки...

Кава-брейк #33. 3 корисні поради для забезпечення безпеки в Java-розробці. 4 способи аналізу коду, про які повинен знати кожен розробник

Стаття з групи Random UA

3 корисні поради для забезпечення безпеки в Java-розробці

Джерело: DZone Незважаючи на те, що Java існує з 1990-х років, це, як і раніше, один з найбільш затребуваних ЯП. Розробники використовують Java для ефективного вирішення багатьох проблем, у тому числі пов'язаних з іншими мовами. Крім того, за її допомогою можна створювати рішення будь-якої складності. Кава-брейк #33.  3 корисні поради для забезпечення безпеки в Java-розробці.  4 способи аналізу коду, про які повинен знати кожен розробник - 1Ще одна перевага Java полягає в тому, що використовуючи цю мову можна досягти високого рівня безпеки. Звичайно, не варто сприймати це як належне. Забезпечити безпеку при створенні Java-програми - один з головних пріоритетів для розробників. Зневага до цього правила призведе до того, що ваша компанія зіткнеться з недовірою з боку споживачів. Щоб ви могли уникнути подібної ситуації, ми підготували кілька практичних порад, які могли б стати для вас корисними при розробці веб-застосунків на Java.

Захист від використання SQL-коду

Впровадження SQL-коду - одна з найсерйозніших вразливостей. З її допомогою зловмисники отримують доступ до конфіденційних даних. Проблема виникає, коли хакер перехоплює запити додатка до бази даних і використовує їх для отримання доступу до інформації про користувачів, а потім для будь-яких інших незаконних цілей. Зрозуміло, від цього можна захиститися. У ваших силах зробити так, щоб зловмисники не могли використовувати атаки з використанням SQL-коду у вашому додатку: наприклад, параметризуючи запити. Для цього необхідно використати підготовлений запит (prepared statement). В ідеалі, розробники повинні застосовувати тільки цей метод для створення запитів. Нижче наведено приклад Java-коду, який допоможе вам краще зрозуміти, як це робиться:
public void prepStatmentExample(String parameter) throws SQLException {
   Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
   String query = "SELECT * FROM USERS WHERE lastname = ?";
   PreparedStatement statement = connection.prepareStatement(query);
   statement.setString(1, parameter);
   System.out.println(statement);
   ResultSet result = statement.executeQuery();
   printResult(result);
}

Перевіряйте сторонні бібліотеки

Це одна з найважливіших порад, якою повинна дотримуватися будь-яка команда Java-розробників. Важливим він є тим, що дозволяє ще раз переконатися, що код не містить вразливості. Нехтуючи перевіркою сторонніх бібліотек, ви просто зруйнуєте якість та репутацію своєї веб-додатки. Крім того, така перевірка допомагає краще виявляти помилки, проблеми з продуктивністю та багато іншого.

Використовуйте дані з великою обережністю

Кожна веб-програма зазвичай містить безліч конфіденційних даних, таких як банківські реквізити клієнтів тощо. Отже, програмістам важливо бути дуже обережними під час обробки такої інформації. Краще заздалегідь розрахувати, коли та які конфіденційні дані буде запитувати вашу програму. І не забудьте очистити методи toString() по суті предметної області. Розробка веб-додатків на Java, якщо вона враховує всі вимоги до безпеки, здатна допомогти не лише клієнтам, а й компаніям. Можете не сумніватися: завдяки безпеці вам буде набагато легше підняти свій бізнес на новий рівень.

4 способи аналізу коду, про які повинен знати кожен розробник

Джерело: TechBeacon Ви, напевно, чули термін «статичний аналіз». Найчастіше під ним мають на увазі якийсь один відомий інструмент або метод. Але насправді є кілька різновидів статичного аналізу, кожен з яких має певне значення при використанні. Найчастіше згадуваний аналіз коду називається SAST (Static Application Security Testing – статичне тестування захищеності додатків). Вважається, що це найкращий спосіб тестування. Але крім нього ви можете використовувати додаткові методи, адже кожен із них виявляє різні типи помилок. Ось чотири типи аналізу коду, які я раджу вам вивчити. Кожен з них має свої переваги.

Продуктивність

Інструменти статичного аналізу допомагають виявити шаблони кодингу, що знижують продуктивність. Наприклад, BoxedPrimitiveConstructor шукає шаблони, такі як New Boolean (true). У ранніх версіях Java він часто використовувався, але тепер є ефективніші методи. Використовуючи інструменти статичного аналізу для виявлення таких анти-шаблонів продуктивності, ви унеможливлюєте те, що вони потраплять у вашу базу коду. Ці інструменти корисні і в плані освіти: вони сигналізують досвідченим розробникам про те, що змінабося best practices кодингу і показують новачкам найкращий спосіб упоратися з поставленим завданням.

Надійність

Такі проблеми, як NullPointerException в Java або витік ресурсів в C зазвичай не впливають на безпеку. Але їх потрібно відстежувати та виправляти, оскільки ці проблеми можуть призвести до несподіваної поведінки або втрати часу через простої. Погодьтеся, ніхто не хоче о 3-й ранку отримати повідомлення або дзвінок про те, що ваш сервіс «лежить». Інструменти статичного аналізу, орієнтовані на надійність, можуть допомогти запобігти такому варіанту розвитку подій. Наприклад, інструмент Infer від Facebookздатний виявляти проблеми NullPointer, витоку пам'яті та проблеми безпеки/синхронізації потоків. Оскільки загальновідомо, що витоку пам'яті та проблеми з потоками важко знайти та налагодити, інструменти статичного аналізу особливо корисні для такого типу помилок: вони заощаджують час розробника та підвищують продуктивність у довгостроковій перспективі.

Безпека

Існує великий спектр проблем безпеки, якому відповідає ряд різних алгоритмів статичного аналізу, призначених для їх виявлення. Наприклад, методи, націлені на пошук вразливостей потоку інформації (№ 1 , 3 та 7з десятки критичних загроз безпеки веб-застосунків OWASP Top 10), не завжди хороші для виявлення проблем безпеки пам'яті (SANS 25 Issue #1). Це означає, що рекомендується використовувати кілька інструментів, навіть якщо ви насамперед дбаєте про безпеку. Зазначений інструмент Infer допомагає виявити вразливості потоку інформації, такі як атаки з впровадженням команд або невдалі спроби зашифрувати неактивні дані. Налаштування Infer для виведення на екран інформації про вашу програму та його інфраструктуру здатне виявити більше помилок і покращити співвідношення «сигнал/шум». Інструмент із відкритим вихідним кодом FindSecBugsвиявляє проблеми з конфігурацією, використання погано захищеної криптографії та проблеми з використанням команд для конкретного фреймворку. Він працює з коробки - додаткові налаштування не знадобляться.

Стиль

Ще одна хороша практика – заохочувати розробників команди писати код у єдиному стилі. Не важливо вибрати конкретний стиль, як забезпечити умови, щоб розробники дотримувалися його. Як приклад можна навести посібники зі стилювід компанії Airbnb. Є дві вагомі причини автоматизувати виявлення порушень стилю за допомогою статичного аналізу. По-перше, автоматизація допомагає підтримувати цілісність коду. По-друге, якщо розробник може помаботись, то інструмент цього ніколи не допустить — він завжди вкаже на порушення стилю. Ніхто не хоче бути рецензентом коду, який вказує іншим на проблеми із пробілами чи іменами змінних. Краще дозволити інструментам взяти на себе відповідальність за таку скрупульозність, щоб члени команди могли зосередитися на покращенні архітектури та інших високорівневих аспектах якості коду.

Взаємопов'язаність

З такою кількістю інструментів, необхідних для широкого охоплення різних типів помилок, інтеграція цих інструментів у процеси DevOps дуже важлива. Найголовніше тут – поставити правильну мету для процесу розробки. Наприклад, перевірку коду, оскільки платформа використовується декількома розробниками (на відміну від IDE, які зазвичай менш зв'язні) і часто керується централізовано. Якщо ви хочете розширити використання статичного аналізу, почніть із простих інструментів — FindSecBugs та PMD , які заточені під пошук проблем з безпекою та стилем коду. Infer та ErrorProneтрохи складніше у роботі, оскільки вимагають інтеграції до системи складання, але вони забезпечують глибший аналіз. Враховуючи те, як вони підвищують продуктивність і впевненість, час, витрачений на впровадження таких інструментів у роботу виразно вартий того.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ