9.9 KiB
Az - Statik Web Uygulamaları
{{#include ../../../banners/hacktricks-training.md}}
Statik Web Uygulamaları Temel Bilgiler
Azure Statik Web Uygulamaları, GitHub gibi depolardan otomatik CI/CD ile statik web uygulamaları barındırmak için bir bulut hizmetidir. Küresel içerik dağıtımı, sunucusuz arka uçlar ve yerleşik HTTPS sunarak güvenli ve ölçeklenebilir hale getirir. Ancak, hizmet "statik" olarak adlandırılsa da, tamamen güvenli olduğu anlamına gelmez. Yanlış yapılandırılmış CORS, yetersiz kimlik doğrulama ve içerik değiştirme gibi riskler, uygun şekilde yönetilmezse uygulamaları XSS ve veri sızıntısı gibi saldırılara maruz bırakabilir.
Dağıtım Kimlik Doğrulaması
Tip
Statik Uygulama oluşturulduğunda, Dağıtım yetkilendirme politikası olarak Dağıtım token'ı ve GitHub Actions iş akışı arasında seçim yapabilirsiniz.
- Dağıtım token'ı: Bir token oluşturulur ve dağıtım sürecini kimlik doğrulamak için kullanılır. Bu token'a sahip olan herkes yeni bir uygulama sürümünü dağıtmak için yeterlidir. Her seferinde depo güncellendiğinde uygulamanın yeni bir sürümünü dağıtmak için token'ın gizli olduğu bir Github Action otomatik olarak depoya dağıtılır.
- GitHub Actions iş akışı: Bu durumda, depoda çok benzer bir Github Action da dağıtılır ve token da gizli bir şekilde saklanır. Ancak, bu Github Action'ın bir farkı vardır;
actions/github-script@v6eylemini kullanarak depo IDToken'ını alır ve uygulamayı dağıtmak için kullanır. - Her iki durumda da
Azure/static-web-apps-deploy@v1eylemiazure_static_web_apps_api_tokenparametresinde bir token ile kullanılsa da, bu ikinci durumdagithub_id_tokenparametresinde yetkilendirme IDToken ile yapıldığından,12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345gibi geçerli bir formatta rastgele bir token uygulamayı dağıtmak için yeterlidir.
Web Uygulaması Temel Kimlik Doğrulaması
Web Uygulamasına erişmek için bir şifre yapılandırmak mümkündür. Web konsolu, yalnızca sahneleme ortamlarını veya hem sahneleme hem de üretim ortamını korumak için yapılandırılmasına izin verir.
Yazma anında şifre korumalı bir web uygulamasının görünümü şöyle:

Herhangi bir şifrenin kullanılıp kullanılmadığını ve hangi ortamların korunduğunu görmek mümkündür:
az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
Ancak, bu şifreyi düz metin olarak göstermez, sadece şöyle bir şey gösterir: "password": "**********************".
Rotalar ve Roller
Rotalar, bir statik web uygulaması içinde gelen HTTP isteklerinin nasıl işleneceğini tanımlar. staticwebapp.config.json dosyasında yapılandırılan bu rotalar, URL yeniden yazma, yönlendirmeler, erişim kısıtlamaları ve rol tabanlı yetkilendirme gibi işlemleri kontrol ederek, kaynakların doğru bir şekilde işlenmesini ve güvenliğini sağlar.
Bazı örnek:
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
Not edin ki bir rol ile bir yolu korumak mümkündür, bu durumda kullanıcıların uygulamaya kimlik doğrulaması yapması ve bu role sahip olmaları gerekecektir. Ayrıca, belirli kullanıcılara EntraID, Facebook, GitHub, Google, Twitter üzerinden giriş yaparak belirli roller veren davetiye oluşturmak da mümkündür; bu, uygulama içinde ayrıcalıkları artırmak için faydalı olabilir.
Tip
Uygulamayı,
staticwebapp.config.jsondosyasındaki değişikliklerin kabul edilmediği şekilde yapılandırmanın mümkün olduğunu unutmayın. Bu durumda, sadece dosyayı Github'dan değiştirmek yeterli olmayabilir, ayrıca Uygulamadaki ayarı değiştirmek de gereklidir.
Aşama URL'si şu formatta: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> örneğin: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Yönetilen Kimlikler
Azure Static Web Apps, yönetilen kimlikler kullanacak şekilde yapılandırılabilir; ancak, bu SSSde belirtildiği gibi, yalnızca kimlik doğrulama amaçları için Azure Key Vault'tan gizli anahtarları çıkarmak için desteklenmektedir, diğer Azure kaynaklarına erişim için değil.
Daha fazla bilgi için, bir statik uygulamada bir kasanın gizli anahtarını kullanma ile ilgili Azure kılavuzunu https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets adresinde bulabilirsiniz.
Sayım
{% tabs %} {% tab title="az cli" %} {% code overflow="wrap" %}
# List Static Webapps
az staticwebapp list --output table
# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table
# Get appsettings
az staticwebapp appsettings list --name <name>
# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>
# Get API key
az staticwebapp secrets list --name <name>
# Get invited users
az staticwebapp users list --name <name>
# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"
## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"
# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>
{% endcode %} {% endtab %}
{% tab title="Az PowerShell" %} {% code overflow="wrap" %}
Get-Command -Module Az.Websites
# Retrieves details of a specific Static Web App in the specified resource group.
Get-AzStaticWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the build details for a specific Static Web App.
Get-AzStaticWebAppBuild -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the application settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves functions for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunction -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves function app settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves the configured roles for a Static Web App.
Get-AzStaticWebAppConfiguredRole -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the custom domains configured for a Static Web App.
Get-AzStaticWebAppCustomDomain -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves details of the functions associated with a Static Web App.
Get-AzStaticWebAppFunction -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the app settings for the function app associated with a Static Web App.
Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the secrets for a Static Web App.
Get-AzStaticWebAppSecret -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves general app settings for a Static Web App.
Get-AzStaticWebAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves user details for a Static Web App with a specified authentication provider.
Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -AuthProvider <AuthProvider>
# Retrieves user-provided function apps associated with a Static Web App.
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>
{% endcode %} {% endtab %} {% endtabs %}
Web Uygulamaları Oluşturma Örnekleri
Aşağıdaki bağlantıda bir web uygulaması oluşturmak için güzel bir örnek bulabilirsiniz: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- https://github.com/staticwebdev/react-basic/generate deposunu GitHub hesabınıza fork edin ve adını
my-first-static-web-appolarak belirleyin. - Azure portalında, GitHub erişimini yapılandırarak ve daha önce fork ettiğiniz yeni depoyu seçerek bir Statik Web Uygulaması oluşturun.
- Oluşturun, birkaç dakika bekleyin ve yeni sayfanızı kontrol edin!
Yetki Yükseltme ve Sonrası İstismar
Azure Statik Web Uygulamaları'nda yetki yükseltme ve sonrası istismar hakkında tüm bilgilere aşağıdaki bağlantıdan ulaşabilirsiniz:
{{#ref}} ../az-privilege-escalation/az-static-web-apps-privesc.md {{#endref}}
Referanslar
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
{{#include ../../../banners/hacktricks-training.md}}