# Az Static Web Apps {{#include ../../../banners/hacktricks-training.md}} ## Static Web Apps Basic Information Azure Static Web Apps एक क्लाउड सेवा है जो **GitHub जैसे रिपॉजिटरी से स्वचालित CI/CD के साथ स्थिर वेब ऐप्स को होस्ट करने के लिए है**। यह वैश्विक सामग्री वितरण, सर्वर रहित बैकएंड, और अंतर्निहित HTTPS प्रदान करता है, जिससे यह सुरक्षित और स्केलेबल बनता है। हालाँकि, भले ही सेवा को "स्थिर" कहा जाता है, इसका मतलब यह नहीं है कि यह पूरी तरह से सुरक्षित है। जोखिमों में गलत कॉन्फ़िगर किया गया CORS, अपर्याप्त प्रमाणीकरण, और सामग्री में छेड़छाड़ शामिल हैं, जो यदि सही तरीके से प्रबंधित नहीं किया गया तो ऐप्स को XSS और डेटा लीक जैसे हमलों के लिए उजागर कर सकता है। ### Deployment Authentication > [!TIP] > जब एक स्थिर ऐप बनाया जाता है, तो आप **डिप्लॉयमेंट प्राधिकरण नीति** के बीच **डिप्लॉयमेंट टोकन** और **GitHub Actions वर्कफ़्लो** चुन सकते हैं। - **डिप्लॉयमेंट टोकन**: एक टोकन उत्पन्न होता है और इसे डिप्लॉयमेंट प्रक्रिया को प्रमाणित करने के लिए उपयोग किया जाता है। **इस टोकन के साथ कोई भी नए संस्करण को डिप्लॉय करने के लिए पर्याप्त है**। हर बार जब रिपॉजिटरी अपडेट होती है, तो ऐप के नए संस्करण को डिप्लॉय करने के लिए टोकन को एक गुप्त में रखकर **Github Action स्वचालित रूप से** रिपॉजिटरी में डिप्लॉय किया जाता है। - **GitHub Actions वर्कफ़्लो**: इस मामले में, एक बहुत समान Github Action भी रिपॉजिटरी में डिप्लॉय किया जाता है और **टोकन भी एक गुप्त में संग्रहीत होता है**। हालाँकि, इस Github Action में एक अंतर है, यह **`actions/github-script@v6`** क्रिया का उपयोग करके रिपॉजिटरी का IDToken प्राप्त करता है और इसका उपयोग ऐप को डिप्लॉय करने के लिए करता है। - भले ही दोनों मामलों में क्रिया **`Azure/static-web-apps-deploy@v1`** का उपयोग एक टोकन के साथ `azure_static_web_apps_api_token` पैरामीटर में किया जाता है, इस दूसरे मामले में एक यादृच्छिक टोकन एक मान्य प्रारूप के साथ जैसे `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` ऐप को डिप्लॉय करने के लिए पर्याप्त है क्योंकि प्राधिकरण `github_id_token` पैरामीटर में IDToken के साथ किया जाता है। ### Web App Basic Authentication वेब ऐप तक पहुँचने के लिए **एक पासवर्ड कॉन्फ़िगर करना संभव है**। वेब कंसोल इसे केवल स्टेजिंग वातावरण या स्टेजिंग और उत्पादन दोनों को सुरक्षित करने के लिए कॉन्फ़िगर करने की अनुमति देता है। यह इस तरह है कि लेखन के समय एक पासवर्ड-संरक्षित वेब ऐप कैसा दिखता है:
यह देखना संभव है **यदि कोई पासवर्ड उपयोग किया जा रहा है** और कौन से वातावरण सुरक्षित हैं: ```bash az rest --method GET \ --url "/subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites//config/basicAuth?api-version=2024-04-01" ``` हालांकि, यह **पासवर्ड को स्पष्ट पाठ में नहीं दिखाएगा**, केवल कुछ इस तरह: `"password": "**********************"`। ### Routes और Roles Routes **कैसे आने वाले HTTP अनुरोधों को संभाला जाता है** एक स्थिर वेब ऐप के भीतर को परिभाषित करते हैं। **`staticwebapp.config.json`** फ़ाइल में कॉन्फ़िगर किए गए, वे URL पुनर्लेखन, पुनर्निर्देश, पहुँच प्रतिबंध, और भूमिका-आधारित प्राधिकरण को नियंत्रित करते हैं, उचित संसाधन प्रबंधन और सुरक्षा सुनिश्चित करते हैं। कुछ उदाहरण: ```json { "routes": [ { "route": "/", "rewrite": "/index.html" }, { "route": "/about", "rewrite": "/about.html" }, { "route": "/api/*", "allowedRoles": ["authenticated"] }, { "route": "/admin", "redirect": "/login", "statusCode": 302 }, { "route": "/google", "redirect": "https://google.com", "statusCode": 307 } ], "navigationFallback": { "rewrite": "/index.html", "exclude": ["/api/*", "/assets/*"] } } ``` नोट करें कि **एक भूमिका के साथ एक पथ की सुरक्षा करना** संभव है, फिर, उपयोगकर्ताओं को ऐप में प्रमाणित होना होगा और उस पथ तक पहुँचने के लिए उस भूमिका को दिया जाना होगा। यह भी संभव है कि **विशिष्ट उपयोगकर्ताओं को विशिष्ट भूमिकाएँ देने के लिए निमंत्रण बनाएँ** जो EntraID, Facebook, GitHub, Google, Twitter के माध्यम से लॉगिन करते हैं, जो ऐप के भीतर विशेषाधिकार बढ़ाने के लिए उपयोगी हो सकता है। > [!TIP] > ध्यान दें कि ऐप को इस तरह से कॉन्फ़िगर करना संभव है कि **`staticwebapp.config.json`** फ़ाइल में परिवर्तन स्वीकार नहीं किए जाते। इस मामले में, केवल GitHub से फ़ाइल को बदलना पर्याप्त नहीं हो सकता है, बल्कि **ऐप में सेटिंग को भी बदलना होगा**। स्टेजिंग URL का यह प्रारूप है: `https://-..` जैसे: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` ### स्निप्पेट्स यह संभव है कि HTML स्निप्पेट्स को एक स्थिर वेब ऐप के अंदर संग्रहीत किया जाए जो ऐप के अंदर लोड होंगे। इसका उपयोग ऐप में **दुष्ट कोड** डालने के लिए किया जा सकता है, जैसे **क्रेडेंशियल चुराने के लिए JS कोड**, एक **कीलॉगर**... अधिक जानकारी विशेषाधिकार वृद्धि अनुभाग में है। ### प्रबंधित पहचान Azure Static Web Apps को **प्रबंधित पहचान** का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है, हालाँकि, [इस FAQ](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-) में उल्लेखित के अनुसार, वे केवल **प्रमाणीकरण उद्देश्यों के लिए Azure Key Vault से रहस्यों को निकालने के लिए समर्थित हैं, अन्य Azure संसाधनों तक पहुँचने के लिए नहीं**। अधिक जानकारी के लिए, आप एक Azure गाइड पा सकते हैं जो एक स्थिर ऐप में एक वॉल्ट सीक्रेट का उपयोग करता है https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets। ## गणना {{#tabs }} {{#tab name="az cli" }} ```bash # List Static Webapps az staticwebapp list --output table # Get Static Webapp details az staticwebapp show --name --resource-group --output table # Get appsettings az staticwebapp appsettings list --name # Get env information az staticwebapp environment list --name az staticwebapp environment functions --name # Get API key az staticwebapp secrets list --name # Get invited users az staticwebapp users list --name # Get current snippets az rest --method GET \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites/trainingdemo/snippets?api-version=2022-03-01" # Get database connections az rest --method GET \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//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//resourceGroups//providers/Microsoft.Web/staticSites//databaseConnections/default/show?api-version=2021-03-01" # Check connected backends az staticwebapp backends show --name --resource-group ``` {{#endtab }} {{#tab name="Az Powershell" }} ```bash Get-Command -Module Az.Websites # Retrieves details of a specific Static Web App in the specified resource group. Get-AzStaticWebApp -ResourceGroupName -Name # Retrieves the build details for a specific Static Web App. Get-AzStaticWebAppBuild -ResourceGroupName -Name # Retrieves the application settings for a specific build environment in a Static Web App. Get-AzStaticWebAppBuildAppSetting -ResourceGroupName -Name -EnvironmentName # Retrieves functions for a specific build environment in a Static Web App. Get-AzStaticWebAppBuildFunction -ResourceGroupName -Name -EnvironmentName # Retrieves function app settings for a specific build environment in a Static Web App. Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName -Name -EnvironmentName # Retrieves the configured roles for a Static Web App. Get-AzStaticWebAppConfiguredRole -ResourceGroupName -Name # Retrieves the custom domains configured for a Static Web App. Get-AzStaticWebAppCustomDomain -ResourceGroupName -Name # Retrieves details of the functions associated with a Static Web App. Get-AzStaticWebAppFunction -ResourceGroupName -Name # Retrieves the app settings for the function app associated with a Static Web App. Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName -Name # Retrieves the secrets for a Static Web App. Get-AzStaticWebAppSecret -ResourceGroupName -Name # Retrieves general app settings for a Static Web App. Get-AzStaticWebAppSetting -ResourceGroupName -Name # Retrieves user details for a Static Web App with a specified authentication provider. Get-AzStaticWebAppUser -ResourceGroupName -Name -AuthProvider # Retrieves user-provided function apps associated with a Static Web App. Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName -Name ``` {{#endtab }} {{#endtabs }} ## Web Apps बनाने के उदाहरण आप निम्नलिखित लिंक में एक वेब ऐप बनाने का अच्छा उदाहरण पा सकते हैं: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github) 1. रिपॉजिटरी https://github.com/staticwebdev/react-basic/generate को अपने GitHub खाते में फोर्क करें और इसका नाम `my-first-static-web-app` रखें 2. Azure पोर्टल में एक Static Web App बनाएं, GitHub एक्सेस कॉन्फ़िगर करें और पहले फोर्क की गई नई रिपॉजिटरी का चयन करें 3. इसे बनाएं, और कुछ मिनट प्रतीक्षा करें, और अपने नए पृष्ठ की जांच करें! ## विशेषाधिकार वृद्धि और पोस्ट एक्सप्लॉइटेशन Azure Static Web Apps में विशेषाधिकार वृद्धि और पोस्ट एक्सप्लॉइटेशन के बारे में सभी जानकारी निम्नलिखित लिंक में पाई जा सकती है: {{#ref}} ../az-privilege-escalation/az-static-web-apps-privesc.md {{#endref}} ## संदर्भ - [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview) - [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans) {{#include ../../../banners/hacktricks-training.md}}