|
import requests |
|
import json |
|
import os |
|
|
|
SAFE_BROWSING_API_KEY = os.getenv("GOOGLE_SAFE_BROWSING_API_KEY") |
|
SAFE_BROWSING_URL = "https://safebrowsing.googleapis.com/v4/threatMatches:find" |
|
|
|
def check_urls_with_google_safebrowsing(urls): |
|
""" |
|
Debug-enabled version: |
|
- Prints payload and raw response to help troubleshoot Safe Browsing issues. |
|
Returns a dict {url: bool is_malicious}. |
|
""" |
|
result = {} |
|
if not SAFE_BROWSING_API_KEY: |
|
print("No GOOGLE_SAFE_BROWSING_API_KEY found. Returning all URLs as safe.") |
|
for u in urls: |
|
result[u] = False |
|
return result |
|
|
|
|
|
threat_entries = [{"url": u} for u in urls] |
|
|
|
payload = { |
|
"client": { |
|
"clientId": "my-smishing-detector", |
|
"clientVersion": "1.0" |
|
}, |
|
"threatInfo": { |
|
"threatTypes": [ |
|
"MALWARE", |
|
"SOCIAL_ENGINEERING", |
|
"UNWANTED_SOFTWARE", |
|
"POTENTIALLY_HARMFUL_APPLICATION" |
|
], |
|
"platformTypes": ["ANY_PLATFORM"], |
|
"threatEntryTypes": ["URL"], |
|
"threatEntries": threat_entries |
|
} |
|
} |
|
|
|
print("---- Safe Browsing Debug ----") |
|
print("REQUEST Payload (JSON):") |
|
print(json.dumps(payload, indent=2)) |
|
print("REQUEST Endpoint:", SAFE_BROWSING_URL, "Key:", SAFE_BROWSING_API_KEY) |
|
print("URLs being checked:", urls) |
|
|
|
try: |
|
resp = requests.post( |
|
SAFE_BROWSING_URL, |
|
params={"key": SAFE_BROWSING_API_KEY}, |
|
json=payload, |
|
timeout=10 |
|
) |
|
|
|
print("RESPONSE Status Code:", resp.status_code) |
|
try: |
|
data = resp.json() |
|
print("RESPONSE JSON:") |
|
print(json.dumps(data, indent=2)) |
|
except Exception as parse_error: |
|
print("Error parsing response as JSON:", parse_error) |
|
data = {} |
|
|
|
|
|
malicious_urls = set() |
|
if "matches" in data: |
|
for match in data["matches"]: |
|
threat_url = match.get("threat", {}).get("url") |
|
if threat_url: |
|
malicious_urls.add(threat_url) |
|
|
|
for u in urls: |
|
result[u] = (u in malicious_urls) |
|
|
|
except Exception as e: |
|
print(f"Error contacting Safe Browsing API: {e}") |
|
|
|
for u in urls: |
|
result[u] = False |
|
|
|
print("RESULTS (url -> malicious):", result) |
|
print("---- End Debug ----\n") |
|
|
|
return result |