Säkra Golang-webbapplikationer med IP-vitlista

Säkra Golang-webbapplikationer med IP-vitlista
Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

I den moderna sfären av internetteknik kan vikten av att säkerställa säkerheten för webbapplikationer och servrar inte överskattas eftersom frekvensen och sofistikeringen av cyberattacker fortsätter att öka. På grund av detta ökar också behovet av robusta och banbrytande säkerhetsåtgärder för webbaserade system.





MAKEUSE AV DAGENS VIDEO SCROLL FÖR ATT FORTSÄTTA MED INNEHÅLL

Vitlistning av IP-adresser är en av många moderna tekniker för att säkra webbapplikationer, servrar och API:er. Även om det bara används i vissa specifika fall är det ett rekommenderat sätt att säkerställa begränsning av tillgången till resurser på internet när det behövs.





Vad är IP-vitlistning?

IP-vitlistning är helt enkelt en typ av vitlistning som kan hänvisas till som en webbsäkerhetsåtgärd som används för att begränsa åtkomsten till ett nätverk eller en resurs till en definierad IP-adress eller ett intervall av IP-adresser som anses vara behöriga att få åtkomst till systemet.





När IP-vitlista implementeras i ett system kan endast de IP-adresser som läggs till i vitlistan komma åt systemet och resurserna på det, medan andra IP-adresser är blockerade.

IP-vitlistning är ett mycket vanligt sätt att säkra mycket kritisk data som bör vara tillgänglig för endast en individ eller en given uppsättning personer, och skyddad från alla hackningsförsök.



Ett vanligt exempel på IP-vitlistning är i MongoDB Atlas där du skapa ett Mongo-databaskluster i molnet och du uppmanas att lägga till din nuvarande IP-adress i en lista så att förfrågningar till din databas eller kluster endast tillåts när de kommer från din dator.

När ska du implementera IP-vitlistning?

IP-vitlistning är inte något varje system eller applikation behöver. Det finns fall där det rekommenderas och är lämpligt att implementera det i en applikation eller ett system. Följande är några exempel på scenarier där du bör överväga att implementera en IP-vitlista.





  • När applikationen endast är avsedd att användas av en specifik grupp användare, såsom anställda eller kunder hos ett visst företag.
  • När du vill att applikationen endast ska vara tillgänglig från en specifik plats kan du vitlista en rad IP-adresser som är specifika för den platsen.
  • När applikationen används för att ge tillgång till konfidentiell information eller immateriell egendom, såsom en forskningsdatabas eller proprietär programvara.
  • När applikationen är privat men tillgänglig över internet och behöver skyddas från externa hot, såsom DDoS-attacker eller malwareinfektioner.
  • När applikationen är värd på en offentlig molnplattform och behöver skyddas från obehörig åtkomst av andra hyresgäster eller användare av plattformen.
  • När applikationen används i en reglerad bransch, såsom sjukvård eller finans, där efterlevnad av säkerhetsstandarder krävs.

Det finns många fler fall, men i grunden, närhelst en applikation har någon av egenskaperna som anges ovan, bör du överväga att implementera en IP-vitlista.

hur man vidarebefordrar en text på iphone

Hur man implementerar IP-vitlistning i Go

Go är ett populärt modernt programmeringsspråk för att bygga webbservrar och API:er med allt du behöver för att bygga en standard och säker webbapplikation.





Det här avsnittet visar användningen av Go's Gin-ramverk för att implementera provservern och logiken för IP-vitlistning som är en mellanprogramfunktion. Du kan installera Gin-ramverket i ett projekt genom att köra följande kommando.

 go get github.com/gin-gonic/gin 

Efter att ha installerat Gin-ramverket kan du nu gå vidare med att implementera mellanvaran för IP-vitlista. Du kan skapa en ny mellanprogramsfil var som helst i ditt projekt, beroende på din projektarkitektur. Här är implementeringen av middleware-funktionen:

 package middlewares 

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func IPWhiteListMiddleware(whitelist map[string]bool) gin.HandlerFunc {
    return func(c *gin.Context) {
        userIP := c.ClientIP()

        if !whitelist[userIP] {
            c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
                "error": "You are not authorized to access this resource!",
            })
        } else {
            c.Next()
        }
    }
}

I koden ovan visas IPWhiteListMiddleware funktion är definierad för att acceptera en definierad vitlista för IP-adresser som ett argument. Vitlistan är implementerad som en kartdatastruktur så att IP-adresser enkelt kan tilldelas värden på Sann och falsk för att ange deras tillgänglighet.

Sedan använder funktionen Gin-ramverket Klient-IP funktion för att få den aktuella IP-adressen för användaren som försöker göra begäran, och kontrollerar om den finns i vitlistan och med en Sann värde. Om det inte hittas, eller om det visar sig ha ett värde på falsk , avbryter mellanvaran begäran och returnerar ett 403-fel (förbjudet).

hur man återställer lösenordet på ps4

En exempelslutpunkt för att testa denna funktionalitet kan implementeras för att se hur IP-vitlistan fungerar. Följande kod är ett program som definierar en vitlista och implementerar två slutpunkter (en begränsad och en obegränsad).

 package main 

import (
    "github.com/gin-gonic/gin"
    "go-ip-whitelist/middlewares"
    "net/http"
)

var IPWhitelist = map[string]bool{
    "127.0.0.1": true,
    "111.2.3.4": true,
    "::1": true,
}

func main() {
    router := gin.Default()

    router.GET("/index", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Welcome to my secure application!",
        })
    })

    restrictedPage := router.Group("/")
    restrictedPage.Use(middlewares.IPWhiteListMiddleware(IPWhitelist))

    restrictedPage.GET("/adminZone", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "This endpoint is secured with IP whitelisting!",
        })
    })

    router.Run(":3333")
}

När applikationen körs med gå spring main.go , servern startar på port 3333 och du kan köra testförfrågningar till /adminZone slutpunkt, för att se hur mellanvaran fungerar. Du kan också växla värdet för localhost IP i vitlistan mellan Sann och falsk .

Här är ett exempel på begäran som ska visa när IP-adressen inte är vitlistad eller när dess värde i vitlistan är inställd på falsk :

  Testbegäran för när IP-adressen inte är vitlistad

Här är en annan begäran om när IP-adressen finns i IP-vitlistan med dess värde inställt på Sann :

  Testbegäran för när IP-adressen är vitlistad