REST API Security Guide

a REST API-k biztonságosságának ismerete ugyanolyan fontos, mint maga az API-k megírása. A REST API-k többnyire HTTP protokollon alapulnak, és minden internetkapcsolattal rendelkező felhasználó hozzáférhet hozzájuk, így a rossz felhasználók is. Nagyon fontos, hogy biztonságos API-kat írjon a vállalkozás védelme érdekében.

mielőtt elkezdené a biztonságos RESTful API-kat, értsük meg, mi az összes lehetőségünk fejlesztőként? Mi lesz jó a használatunkhozeset?

Table of Contents1. Authentication vs. Authorization2. Four Ways to Secure RESTful Web Services- BASIC Authentication- DIGEST Authentication- Client CERT Authentication- OAUTH2 API Keys3. RESTful Web Services Security Implementations- Using SecurityContext- Using Annotations4. Best Practices

különbség a hitelesítés vs. engedélyezés

mielőtt belevágnánk a fő vitába, tegyük egyértelművé tényeinket arról, hogy mi a hitelesítés és mi az engedélyezés.

egyszerű egyszerű angol nyelven a hitelesítés az a folyamat, amely megállapítja, hogy “a felhasználó valóban valaki, akinek állítja magát”. Technikai értelemben a rendszerbe való bejelentkezés folyamata felhasználónév/jelszó vagy bármilyen hasonló mechanizmus révén, például ujjlenyomat-szkennelés, biztonsági token, biztonsági kérdések vagy SAML token, amelyet az SSO login kapott. Kell lennie valaminek, ami azonosítja a felhasználót másoktól.

amint a felhasználó belép a rendszerbe, az engedélyezés olyan szabályokra utal, amelyek meghatározzák, hogy “mi a felhasználó megengedett”, és mi nem pl. egy normál felhasználó üzenetet küldhet bármely nyilvános csoportban, de csak a szerkesztő szerepkörrel rendelkező felhasználók törölhetnek valamit. Az engedélyezést gyakran úgy tekintik, mint az engedélyek bevezető beállítását a rendszergazda által, valamint a már beállított engedélyértékek ellenőrzését, amikor a felhasználó hozzáférést kap a rendszerhez.

amikor biztonságos RESTful webszolgáltatásokat biztosítunk, mindkét tényezőre ügyelnünk kell. A két fogalom teljesen ortogonális és független, de mindkettő központi szerepet játszik a biztonsági tervezésben, és az egyik helyes elmulasztása növeli a rendszer sérülésének esélyét..

négy módszer a RESTful webszolgáltatások biztosítására

a RESTful API Java-ban többféle módon is biztosítható. Nézzük át a 4 legnépszerűbb választást:

2.1. Alapvető hitelesítés

ez a legegyszerűbb az összes technika közül, és valószínűleg a leggyakrabban használt is. Bejelentkezési / jelszó űrlapokat használ – ez csak alapvető hitelesítés. Adja meg felhasználónevét és jelszavát, és küldje el az űrlapot a szervernek, és az alkalmazás felhasználóként azonosítja Önt – használhatja a rendszert – különben hibát kap.

a biztonsági megvalósítás fő problémája az, hogy a hitelesítő adatok egyszerű módon terjednek az ügyféltől a szerverig. A hitelesítő adatokat csak a Base64 kódolja a szállítás során, de semmilyen módon nem titkosítva vagy kivonatolva. Így bármely szippantó elolvashatja az elküldött csomagokat a hálózaton keresztül.

ezért a HTTPS-t általában előnyben részesítik az alapvető hitelesítéssel szemben, vagy azzal együtt használják, ami a webszerverrel folytatott beszélgetést teljesen titkosítja. A legjobb az, hogy kívülről senki sem tudja kitalálni, hogy az alapvető Auth zajlik.

2.2. DIGEST Authentication

ez a hitelesítési módszer egy hash algoritmust használ a felhasználó által megadott jelszó titkosításához (password hash), mielőtt elküldené a szerverre. Ez nyilvánvalóan sokkal biztonságosabbá teszi, mint az alapvető hitelesítési módszer, amelyben a felhasználó jelszava egyszerű szövegben halad, amelyet bárki könnyen elolvashat, aki elfogja.

További információ: titkosított jelszavak generálása

a java-ban is sok ilyen kivonatoló algoritmus létezik, amelyek valóban hatékonyak a jelszóbiztonság szempontjából, mint például az MD5, SHA, BCrypt, SCrypt és a PBKDF2WithHmacSHA1 algoritmusok.

kérjük, ne feledje, hogy ha ez a jelszó hash keletkezik, és tárolja az adatbázisban, akkor nem tudja átalakítani vissza az eredeti jelszót. Minden alkalommal, amikor a felhasználó bejelentkezik az alkalmazásba, újra meg kell újítania a jelszó kivonatát, és meg kell egyeznie az adatbázisban tárolt kivonattal. Tehát, ha a felhasználó elfelejtette a jelszavát, akkor ideiglenes jelszót kell küldenie neki, és meg kell kérnie, hogy változtassa meg az új jelszavával. Nos, ez manapság általános trend.

2.3. Ügyfél CERT hitelesítés

ez egy olyan mechanizmus, amelyben a kiszolgáló és az ügyfél között tanúsítványokon keresztül bizalmi megállapodás jön létre. Ezeket egy olyan Ügynökségnek kell aláírnia, amely biztosítja, hogy a hitelesítésre bemutatott tanúsítvány jogszerű legyen, amely CA néven ismert.

ezzel a technikával, amikor az ügyfél megpróbál hozzáférni egy védett erőforráshoz, felhasználónév vagy jelszó megadása helyett bemutatja a tanúsítványt a kiszolgálónak. A tanúsítvány tartalmazza a hitelesítéshez szükséges felhasználói adatokat, beleértve a biztonsági hitelesítő adatokat is, az egyedi privát-nyilvános kulcspár mellett. A szerver ezután meghatározza, hogy a Felhasználó jogos-e a CA-n keresztül. Ezenkívül ellenőriznie kell, hogy a felhasználó hozzáfér-e az erőforráshoz. Ennek a mechanizmusnak a HTTPS-t kell használnia kommunikációs protokollként, mivel nincs biztonságos csatornánk annak megakadályozására, hogy bárki ellopja az ügyfél identitását.

megtalálható a teljes bemutató generáló biztonsági tanúsítvány hivatalos oracle docs.

2.4. OAUTH2 API kulcsok

ha olyan alkalmazásokat fejlesztett ki, amelyek más alkalmazásokkal kölcsönhatásba lépnek a felhőn keresztül, például facebook integráció vagy twitter hitelesítés stb. akkor ezt már használta. Megkövetelik, hogy adja meg az API kulcsot és az API titkot, hogy helyesen azonosítsa önt. Ezek az API kulcs és titok néhány véletlenszerű kódolású karakterlánc, amelyet lehetetlen kitalálni.

ahhoz, hogy megértsük, hogyan működik, tegyük fel, hogy egy Flickr-t (fotómegosztó alkalmazást) használ, és néhány fotót a REST API-jával szeretne közzétenni. A Flickr dokumentumokban dokumentált módon elkészíti a kérést, majd elküldi.

ezután a kérés fogadásakor a Flickr hitelesíti a felhasználót az API-kulcsból származó információk olvasásával a felhasználóhoz tartozó titkos kulccsal. Miután ezek az érvényesítések sikeresek voltak, a kiszolgáló elküldi a választ az ügyfélnek. Így választ kapunk az összes olyan fotóval, amelyet nemrégiben tettek közzé a Flickr-en belül.

amint észreveszi, így könnyedén létrehozhat alkalmazásokat a szolgáltató API-jával. Ezenkívül a szolgáltató lehetővé teszi a hitelesítést, a nyilvános információk elérését.

ha valaki nem tartja tiszteletben a megállapodásokat, például kéretlen forgalmat küld vagy bármilyen irányelvsértést követ el, a Szolgáltató visszavonja az API-kulcsot, és megakadályozza az API-k visszaélésszerű használatát.

REST API biztonsági megvalósítások

a fenti koncepciókon kívül általában a RESTful API-kat a vállalatnál az alábbi módszerekkel kell biztosítani.

3.1. JAX-RS SecurityContext példány

a javax.ws.rs.core.SecurityContextinterfész hozzáférést biztosít a biztonsággal kapcsolatos információkhoz egy kéréshez, és nagyon hasonlít a javax.servlet.http.HttpServletRequest -hez.

a SecurityContext eléréséhez egy példányt injektál egy osztálymezőbe, szetter metódusba vagy metódusparaméterbe a javax.ws.rs.core.Context megjegyzés használatával, például az alábbi kódban a sc.isUserInRole() a felhasználó engedélyezésének ellenőrzésére szolgál.

3.2. JAR-RS megjegyzések a módszer szintű engedélyezéshez

ezt a technikát széles körben használják a vállalati alkalmazásokban, és használják a hitelesített használt szerepek és felelősségek ellenőrzésére – bármely bizonyos művelethez. A JAX-RS az alábbiakban kommentárokat tartalmaz erre a célra.

  • @PermitAll
  • @DenyAll
  • @ RolesAllowed

egy példa használata kommentár lehet:

Olvass tovább : JAX-RS hitelesítési és engedélyezési példa

REST API biztonsági bevált gyakorlatok

jegyezzünk fel néhány fontos pontot a RESTful webszolgáltatások biztonságának megtervezésekor.

  1. csak HTTPS protokollt használjon, hogy a teljes kommunikáció mindig titkosítva legyen.
  2. soha ne küldjön hitelesítő adatokat vagy API kulcsokat lekérdezési paraméterként. Ezek URL-ben jelennek meg, és könnyen naplózhatók vagy nyomon követhetők.
  3. mindig a legnehezebb titkosítási szintet használja. Ez segít abban, hogy nagyobb önbizalommal rendelkezzen.
  4. a RESTful web services által kitett erőforrások esetében fontos, hogy minden PUT, POST és DELETE kérés védve legyen a webhelyek közötti kérések Hamisításától.
  5. mindig ellenőrizze a bemeneti adatokat ASAP szerver módszerrel érkezik. Csak primitív adatokat használjon bemeneti paraméterként, amennyire csak lehetséges.
  6. támaszkodjon a keretrendszer által biztosított érvényesítési funkciókra, mivel azokat már nagy közösség teszteli.

tudassa velem gondolatait és tapasztalatait arról, hogyan biztosíthatja a RESTful webszolgáltatásokat a szervezetében.

Boldog Tanulást!!

hasznos volt ez a bejegyzés?

tudassa velünk, ha tetszett a bejegyzés. Csak így tudunk fejlődni.
Igen
Nem

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

More: