BasicAuth request passthrough, jak przejść przez BA?

BasicAuth request passthrough, jak przejść przez BA?
misio_
  • Rejestracja:12 miesięcy
  • Ostatnio:7 dni
  • Postów:61
0

Żeby wykonać request POST do zewnętrznej strony, mam taki kod:

Kopiuj
import requests

def make_post_request():
    payload = {'zmienna_1': 'wartosc_1', 'zmienna_2': 'wartosc_2', 'zmienna_3': 'wartosc_3'}
    try:
        res = requests.post('https://moja.strona/moja/sciezka', data=payload)
        if res.text == 'REQUEST PASSED':
            return True
  
        return False
    except Exception:
        return False

A co jeżeli strona jest chroniona przez BasicAuth (BA)? A jaki sposób mogę przemodelować kod, aby móc, podając usr i pass, przejść przez BA?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
3

Cześć @misio_! 👋 Fajnie że jesteś na forum 😊

misio_ napisał(a):

A co jeżeli strona jest chroniona przez BasicAuth (BA)? A jaki sposób mogę przemodelować kod, aby móc, podając usr i pass, przejść przez BA?

Wyślij nagłówek Authorization: Basic <tutaj credentiale>. Jaki dokładnie nagłówek wysłać możesz znaleźć tutaj: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication W skrócie chodzi o wysłanie base64("username:password").

Korzystając z requests, wystarczy przekazać argument headers

Kopiuj
import requests
import base64
credentials = base64.b64encode('user:password')
requests.get("http://www.example.com/", headers={"Authorization":f"Basic {credentials}"})

PS: Teraz widzę żę w requests jest do tego nawet specjalna funkcja:

Kopiuj
from requests.auth import HTTPBasicAuth
requests.get("http://www.example.com/", auth=HTTPBasicAuth('user', 'pass'))

Więcej informacji tutaj: https://requests.readthedocs.io/en/latest/user/authentication/

edytowany 8x, ostatnio: Riddle
misio_
  • Rejestracja:12 miesięcy
  • Ostatnio:7 dni
  • Postów:61
0

Dziękuję! :)

Zapytałem też Gemini od Google i też mi podobnie napisał, dzięki!

Kopiuj
import requests
import base64

def make_post_request(url, data, username, password):
    """
    Wykonuje żądanie POST z autentyfikacją BasicAuth.

    Args:
        url (str): Adres URL serwera.
        data (dict): Dane do przesłania w treści żądania.
        username (str): Nazwa użytkownika.
        password (str): Hasło.

    Returns:
        requests.Response: Obiekt odpowiedzi.
    """

    # Kodowanie danych logowania w Base64
    auth_string = f'{username}:{password}'
    auth_bytes = auth_string.encode('utf-8')
    auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')
    headers = {'Authorization': f'Basic {auth_base64}'}

    # Wykonanie żądania POST
    response = requests.post(url, data=data, headers=headers)
    return response

# Przykład użycia
url = 'https://example.com/api/endpoint'
data = {'key': 'value'}
username = 'your_username'
password = 'your_password'

response = make_post_request(url, data, username, password)

if response.status_code == 200:
    print('Żądanie zakończone sukcesem:', response.json())
else:
    print('Błąd:', response.text)

Bardzo dziękuję! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.