Сканер уязвимостей в веб-сайтах

Сканер уязвимостей в веб-сайтах


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()



Report Page