Сканер уязвимостей в веб-сайтах
pip install requests
import requests
import socket
import ssl
from urllib.parse import urlparse
from datetime import datetime
SEC_HEADERS = [
"Content-Security-Policy",
"Strict-Transport-Security",
"X-Content-Type-Options",
"X-Frame-Options",
"X-XSS-Protection",
"Referrer-Policy",
"Permissions-Policy"
]
def check_ssl(domain):
try:
ctx = ssl.create_default_context()
with ctx.wrap_socket(socket.socket(), server_hostname=domain) as s:
s.settimeout(3)
s.connect((domain, 443))
cert = s.getpeercert()
print("🔒 SSL-сертификат: найден")
expire = datetime.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y %Z")
print(f" 👉 Действителен до: {expire.strftime('%Y-%m-%d')}")
except Exception as e:
print("❌ SSL-сертификат: ошибка или отсутствует")
print(f" Причина: {e}")
def check_headers(url):
print("\n🧪 Проверка HTTP-заголовков:")
try:
r = requests.get(url, timeout=5)
headers = r.headers
for h in SEC_HEADERS:
if h in headers:
print(f"✅ {h}: присутствует")
else:
print(f"❌ {h}: отсутствует")
except Exception as e:
print(f"⚠️ Ошибка при получении заголовков: {e}")
def main():
url = input("🌐 Введите URL (например, https://example.com): ").strip()
if not url.startswith("http"):
url = "https://" + url
domain = urlparse(url).netloc
print(f"\n🔍 Сканирую {domain}...\n")
check_ssl(domain)
check_headers(url)
print("\n✅ Сканирование завершено.")
if __name__ == "__main__":
main()