Serwer programmalarynda iň möhüm görkezijileriň biri howpsuzlykdyr. Bu , işlemeýän talaplaryň görnüşlerinden biridir . Howpsuzlygyň köp bölekleri bar. Elbetde, belli bolan gorag ýörelgelerini we hereketlerini doly öz içine almak üçin birden köp makala ýazmaly, şonuň üçin iň möhümlerine üns bereliň. Bu mowzugy gowy bilýän adam, ähli amallary gurup biler we täze howpsuzlyk deşiklerini döretmezligini üpjün eder, islendik toparda zerur bolar. Elbetde, bu amallary ýerine ýetirseňiz, programma doly howpsuz bolar diýip pikir etmeli dälsiňiz. ! Ok! Themöne olar bilen has ygtybarly bolar. Bar.
1. Java dili derejesinde howpsuzlygy üpjün ediň
Ilki bilen Java-da howpsuzlyk dil aýratynlygy derejesinde başlaýar. Giriş üýtgedijileri bolmadyk bolsa näme ederdik? ... Anarhiýa, az däl. Programmirleme dili ygtybarly kod ýazmaga we köp sanly aç-açan howpsuzlyk aýratynlyklaryndan peýdalanmaga kömek edýär:- Güýçli ýazmak. Java , statiki görnüşde ýazylan dil, iş wagtynda görnüşdäki ýalňyşlyklary ýüze çykarmak mümkinçiligini berýär.
- Üýtgeýjilere giriň. Olaryň kömegi bilen synplara, usullara we synp meýdanlaryna girişi zerur görnüşde düzüp bileris.
- Memoryady awtomatiki dolandyrmak. Bu maksat bilen, bizde (Javaists;)) el bilen konfigurasiýadan azat edýän zibil ýygnaýjy bar. Hawa, käwagt problemalar ýüze çykýar.
- Baýtkody barlamak: Java bytecode düzýär, ony işletmezden ozal iş wagty bilen barlanýar.
- Howpsuz duýgur synplary seriýalamakdan gaça duruň. Bu ýagdaýda, seriýalaşdyrylan maglumatlary aýtman, seriýalaşdyrylan faýldan synp interfeýsini alyp bilersiňiz.
- Üýtgeýän maglumat sapaklaryndan gaça durmaga synanyşyň. Bu üýtgewsiz synplaryň ähli artykmaçlyklaryny berýär (meselem, sapaklaryň howpsuzlygy). Üýtgeýän bir zat bar bolsa, bu garaşylmadyk gylyk-häsiýetlere sebäp bolup biler.
- Yza gaýtarylýan üýtgeýän zatlaryň nusgalaryny ediň. Eger bir usul içerki üýtgäp bilýän obýekte salgylanmany yzyna gaýtarsa, müşderi kody obýektiň içki ýagdaýyny üýtgedip biler.
- We ş.m.
2. SQL sanjym gowşaklygyny ýok ediň
Üýtgeşik gowşaklyk. Özboluşlylygy, iň meşhurlaryň we iň köp ýaýran gowşaklyklaryň biri bolmagydyr. Howpsuzlyk meselesi bilen gyzyklanmaýan bolsaňyz, bu hakda bilmersiňiz. SQL sanjym näme? Bu, garaşylmadyk ýerde goşmaça SQL kody girizip, maglumatlar bazasyna edilen hüjüm. Maglumatlar bazasyny gözlemek üçin käbir parametrleri alýan usulymyz bar diýeliň. Mysal üçin, ulanyjy ady. Gowşaklygy bolan kod şuňa meňzeýär:// Метод достает из базы данных всех пользователей с определенным именем
public List<User> findByFirstName(String firstName) throws SQLException {
// Создается связь с базой данных
Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
// Пишем sql request в базу данных с нашим firstName
String query = "SELECT * FROM USERS WHERE firstName = " + firstName;
// выполняем request
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(query);
// при помощи mapToUsers переводит ResultSet в коллекцию юзеров.
return mapToUsers(result);
}
private List<User> mapToUsers(ResultSet resultSet) {
//переводит в коллекцию юзеров
}
Bu mysalda sql soragy aýratyn setirde öňünden taýýarlanýar. Meseläniň nämedigi görünýär, şeýlemi? Belki mesele ulanmak has gowy bolarmyka String.format
? ? Ok? Onda näme? Geliň, synagçynyň ýerine goýalyň we bahada nämäni ýetirip boljakdygyny pikirleneliň firstName
. Mysal üçin:
- Garaşylýan zady - ulanyjy adyny geçip bilersiňiz. Soňra maglumat bazasy ähli ulanyjylary şol at bilen yzyna getirer.
- Boş setirden geçip bilersiňiz: şonda ähli ulanyjylar yzyna gaýtarylar.
- Ora-da aşakdakylardan geçip bilersiňiz: “''; Jetwel ulanyjylaryny taşlaň; ”. Bu ýerde has uly problemalar bolar. Bu talap tablisany maglumatlar bazasyndan aýyrar. Allhli maglumatlar bilen. HER KIM.
// Метод достает из базы данных всех пользователей с определенным именем
public List<User> findByFirstName(String firstName) throws SQLException {
// Создается связь с базой данных
Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
// Создаем параметризированный request.
String query = "SELECT * FROM USERS WHERE firstName = ?";
// Создаем подготовленный стейтмент с параметризованным requestом
PreparedStatement statement = connection.prepareStatement(query);
// Передаем meaning параметра
statement.setString(1, firstName);
// выполняем request
ResultSet result = statement.executeQuery(query);
// при помощи mapToUsers переводим ResultSet в коллекцию юзеров.
return mapToUsers(result);
}
private List<User> mapToUsers(ResultSet resultSet) {
//переводим в коллекцию юзеров
}
Şeýlelik bilen, bu gowşaklykdan gaça durýarlar. Mesele bu makaladan has çuňňur öwrenmek isleýänler üçin ajaýyp mysal . Bu bölüme düşünýändigiňizi nädip bilýärsiňiz? Aşakdaky degişme aýdyň bolsa, bu gowşaklygyň düýp manysynyň aýdyň alamaty: D.
3. Garaşlyklary skanirläň we täzeläň
Bu näme many berýär? Garaşlylygyň nämedigini bilmeýänler üçin düşündirerin: bu başga biriniň çözgüdini gaýtadan ulanmak üçin awtomatiki gurluşyk ulgamlaryny (Maven, Gradle, Ant) ulanyp, taslama birikdirilen kody bolan arhiw. Mysal üçin, iş wagty bize getterler, sazlaýjylar we ş.m. döredýän “Lombok” taslamasy . Uly programmalar hakda aýtsak, köp dürli baglylyklary ulanýarlar. Käbirleri geçişlidir (ýagny, her garaşlylygyň öz garaşlylygy bolup biler we ş.m.). Şonuň üçin hüjümçiler yzygiderli ulanylýandygy we köp müşderi üçin kynçylyk döredip biljekdigi sebäpli açyk çeşmelere baglylyga has köp üns berýärler. Tutuş garaşlylyk agajynda belli bir gowşaklygyň ýokdugyna göz ýetirmek möhümdir (edil görnüşine meňzeýär). Munuň üçin birnäçe ýol bar.Gözegçilik üçin Snyk ulanyň
Snyk guraly ähli taslama baglylyklary barlaýar we belli gowşak goralanlyklary görkezýär. Şol ýerde, mysal üçin GitHub arkaly taslamalaryňyzy hasaba alyp we import edip bilersiňiz. Mundan başga-da, ýokardaky suratdan görnüşi ýaly, täze wersiýada bu gowşaklygy çözmek mümkin bolsa, Snyk muny etmegi we Pull-Talap döretmegi teklip eder. Açyk çeşme taslamalary üçin mugt ulanylyp bilner. Taslamalar käbir ýygylykda skanirlener: hepdede bir gezek, aýda bir gezek. Snyk skanerine ähli açyk ammarlarymy hasaba aldym we goşdum (bu ýerde howply zat ýok: olar eýýäm hemmeler üçin açyk). Ondan soň, Snyk gözlegiň netijesini görkezdi: Birneme wagt geçensoň, Snyk-bot garaşlylyklaryň täzelenmeli taslamalarynda birnäçe Pull-Talap taýýarlady: Ine, başga bir zat: Şonuň üçin gowşak ýerleri gözlemek we täzelenmek üçin gözegçilik etmek üçin ajaýyp gural. täze wersiýalary.GitHub howpsuzlyk laboratoriýasyny ulanyň
GitHub-da işleýänler, gurlan gurallaryndan peýdalanyp bilerler. Bu çemeleşme hakda has giňişleýin maglumaty GitHub howpsuzlyk laboratoriýasynyň bildirişlerinden alyp bilersiňiz . Bu gural, elbetde, Snykdan has ýönekeý, ýöne hökman äsgermezlik etmeli dälsiňiz. Mundan başga-da, belli gowşak goralanlyklaryň sany diňe köpeler, şonuň üçin Snyk hem, GitHub Howpsuzlyk laboratoriýasy hem giňeler we gowulaşar.Sonatype DepShield-i işjeňleşdiriň
Ammarlaryňyzy saklamak üçin GitHub-dan peýdalanýan bolsaňyz, “MarketPlace - Sonatype DepShield” -den taslamalaryňyza goşundylardan birini goşup bilersiňiz. Onuň kömegi bilen garaşlylyk üçin taslamalary hem skanirläp bilersiňiz. Mundan başga-da, bir zat tapsa, aşakda görkezilişi ýaly degişli düşündiriş bilen GitHub Issue dörediler:4. Duýgur maglumatlary seresaplylyk bilen dolandyryň
Iňlis dilinde “duýgur maglumatlar” jümlesi has ýygy duş gelýär. Şahsy maglumatlaryň, kredit kartoçkalarynyň belgileriniň we müşderiniň beýleki şahsy maglumatlarynyň aýan edilmegi düzedip bolmajak zyýan getirip biler. Ilki bilen, programma dizaýnyna ýakyndan göz aýlamaly we haýsydyr bir maglumatlaryň hakykatdanam zerurdygyny anyklamaly. Belki, olaryň käbiri üçin zerurlyk ýok, ýöne gelmedik we gelmejek gelejek üçin goşuldy. Mundan başga-da, taslama ýazylanda şeýle maglumatlar syzyp biler. Duýgur maglumatlaryň gündeligiňize girmeginiň öňüni almagyň ýönekeý usuly,toString()
domen guramalarynyň (Ulanyjy, Talyp, Mugallym we ş.m.) usullaryny arassalamakdyr. Bu duýgur meýdanlaryň tötänleýin çap edilmeginiň öňüni alar. Bir usul döretmek üçin “Lombok” -dan peýdalanýan bolsaňyz , meýdançanyň usul arkaly çykyşda ulanylmagynyň öňüni almak üçin toString()
düşündiriş ulanyp bilersiňiz . Şeýle hem, daşarky dünýä bilen maglumatlary paýlaşanyňyzda gaty seresap boluň. Mysal üçin, ähli ulanyjylaryň atlaryny görkezýän http ahyrky nokady bar. Ulanyjynyň içerki özboluşly şahsyýetini görkezmegiň zerurlygy ýok. Näme üçin? Sebäbi ony ulanýan hüjümçi, her ulanyjy hakda başga, has gizlin maglumatlary alyp biler. Mysal üçin, POJO-lary JSON- a seriallaşdyrmak we deserializasiýa etmek üçin Jekson ulanýan bolsaňyz , belli bir meýdanlaryň seriallaşdyrylmagynyň we deserializasiýa edilmeginiň öňüni almak üçin bellikleri we bellikleri ulanyp bilersiňiz . Umuman, dürli ýerler üçin dürli POJO sapaklaryny ulanmaly. Bu näme many berýär? @ToString.Exclude
toString()
@JsonIgnore
@JsonIgnoreProperties
- Maglumat bazasy bilen işlemek üçin diňe POJO - Entity ulanyň.
- Iş logikasy bilen işlemek üçin Entity Model-e geçiriň.
- Daşarky dünýä bilen işlemek we http haýyşlaryny ibermek üçin üçünji guramalary - DTO ulanyň.
Güýçli şifrlemek we ýuwmak algoritmlerini ulanyň
Müşderiniň gizlin maglumatlary ygtybarly saklanmalydyr. Munuň üçin şifrlemäni ulanmaly. Wezipe baglylykda haýsy şifrlemäni ulanmalydygyny çözmeli. Mundan başga-da, has güýçli şifrlemek has köp wagt alýar, şonuň üçin oňa zerurlygyň näçeräk wagt sarp edilendigini göz öňünde tutmaly. Elbetde, algoritmi özüňiz ýazyp bilersiňiz. Emma bu zerur däl. Bu ugurda bar bolan çözgütlerden peýdalanyp bilersiňiz. Mysal üçin, Google Tink :<!-- https://mvnrepository.com/artifact/com.google.crypto.tink/tink -->
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink</artifactId>
<version>1.3.0</version>
</dependency>
Bir ýoly we beýlekisini nädip şifrlemelidiginiň mysalyny ulanyp, ony nädip ulanmalydygyny göreliň:
private static void encryptDecryptExample() {
AeadConfig.register();
KeysetHandle handle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_CTR_HMAC_SHA256);
String plaintext = "Цой жив!";
String aad = "Юрий Клинских";
Aead aead = handle.getPrimitive(Aead.class);
byte[] encrypted = aead.encrypt(plaintext.getBytes(), aad.getBytes());
String encryptedString = Base64.getEncoder().encodeToString(encrypted);
System.out.println(encryptedString);
byte[] decrypted = aead.decrypt(Base64.getDecoder().decode(encrypted), aad.getBytes());
System.out.println(new String(decrypted));
}
Parol şifrlemek
Bu mesele üçin asimmetrik şifrlemäni ulanmak iň ygtybarlydyr. Näme üçin? Sebäbi programma hakykatdanam parollary açarlamak zerurlygy ýok. Bu umumy çemeleşme. Aslynda, ulanyjy paroly girizeninde ulgam ony şifrleýär we parol depesindäki zatlar bilen deňeşdirýär. Şifrlemek şol bir serişdeleri ulanmak arkaly amala aşyrylýar, şonuň üçin olaryň gabat gelmegine garaşyp bilersiňiz (dogry paroly girizseňiz;). BCrypt we SCrypt bu maksat üçin amatlydyr. Bularyň ikisi hem köp wagt talap edýän hasaplaýyş çylşyrymly algoritmleri bilen bir taraplaýyn funksiýalar (kriptografiki heşler). Bu size gerek zat, sebäbi başyňy kesgitlemek hemişelik dowam eder. Mysal üçin, Bahar Howpsuzlygy birnäçe algoritmleri goldaýar.SCryptPasswordEncoder
Şeýle hem ulanyp bilersiňiz BCryptPasswordEncoder
. Güýçli şifrlemek algoritmi näme, indiki ýyl gowşak bolup biler. Netijede, ulanylýan algoritmleri barlamaly we kitaphanalary algoritmler bilen täzelemeli diýen netijä gelýäris.
Çykyşyň ýerine
Bu gün howpsuzlyk barada gürleşdik we elbetde köp zat perdäniň aňyrsynda galdy. Justaňy siziň üçin täze dünýä: öz durmuşyny ýaşaýan dünýä üçin gapy açdym. Howpsuzlyk bilen syýasat bilen deňdir: syýasata goşulmasaň, syýasat saňa goşular. Däp bolşy ýaly, Github hasabyma ýazylmagy maslahat berýärin . Şol ýerde işimi öwrenýän we ulanýan dürli tehnologiýalarymda ýerleşdirýärin.peýdaly baglanyşyklar
Hawa, sahypadaky makalalaryň hemmesi diýen ýaly iňlis dilinde ýazylan. Islesek-islemesek-de, iňlisler programmistleriň aragatnaşyk saklamagy üçin dil. Programmirlemek boýunça iň täze makalalar, kitaplar we magazinesurnallar iňlis dilinde ýazylýar. Şonuň üçin tekliplere baglanyşyklarym esasan iňlis dilinde:- Habr: Täze başlanlar üçin SQL sanjym
- Oracle: Java Howpsuzlyk Resurs Merkezi
- Oracle: Java SE üçin ygtybarly kodlaşdyryş görkezmeleri
- Baeldung: Java howpsuzlygynyň esaslary
- Orta: Java howpsuzlygyňyzy güýçlendirmek üçin 10 maslahat
- Snyk: 10 java howpsuzlygy boýunça iň oňat tejribe
- JR: GitHub Howpsuzlyk Laboratoriýasynyň bildirişi: ähli koduňyzy bilelikde goramak
GO TO FULL VERSION