Как правильно получить API Google для проверок сайта на безопасность?

Ссылка скопирована
1 ответ

Всем привет!

В некоторых браузерах выходит предупреждение что: Осторожно, поддельный сайт! , Это небезопасный сайт, Deceptive site ahead

Создал скрипт на python, который будет считывать текстовый файл domains.txt и проверять в нем доменные имена, необходимо проверить чтобы на домене не выходило предупреждение: Осторожно, поддельный сайт! , Это небезопасный сайт, Deceptive site ahead.

Условия:
1. Если домен является поддельным (Осторожно, поддельный сайт! , Это небезопасный сайт, Deceptive site ahead) - необходимо создать текстовый файл block_domain.txt и записать его туда
2. Если домен не является поддельным (Осторожно, поддельный сайт! , Это небезопасный сайт, Deceptive site ahead) - необходимо создать файл white_domain.txt и записать его туда

Скрипт должен проверять информацию о домене на Safe Browsing site status.

Написал все это дело я на Python:

import urllib.request import json  # Функция проверки безопасности домена на основе сервиса SafeBrowsing def check_domain(domain):     url = "https://safebrowsing.googleapis.com/v4/threatMatches:find"     api_key = "тут мой API ключ" # мойAPI ключ     headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"}     data = {         "client": {             "clientId": "mycompany",             "clientVersion": "1.5.2"         },         "threatInfo": {             "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"],             "platformTypes": ["ANY_PLATFORM"],             "threatEntryTypes": ["URL"],             "threatEntries": [{"url": domain}]         }     }     try:         req = urllib.request.Request(url=url, headers=headers, data=json.dumps(data).encode("utf-8"))         response = urllib.request.urlopen(req)         result = json.loads(response.read().decode("utf-8"))         if result.get("matches"):             return True         else:             return False     except urllib.error.HTTPError as e:         print(f"HTTP Error: {e.code} - {e.reason}")         return False  # Открытие файла для чтения with open("domains.txt", "r") as file:     # Открытие файлов для записи     block_file = open("block_domain.txt", "w")     white_file = open("white_domain.txt", "w")          # Чтение каждой строки файла domains.txt     for line in file:         domain = line.strip() # Удаление пробелов и переносов строки         if check_domain(domain):             block_file.write(domain + "n") # Запись в файл block_domain.txt         else:             white_file.write(domain + "n") # Запись в файл white_domain.txt          # Закрытие файлов     block_file.close()     white_file.close()

import urllib.request import json # Функция проверки безопасности домена на основе сервиса SafeBrowsing def check_domain(domain): url = "https://safebrowsing.googleapis.com/v4/threatMatches:find" api_key = "тут мой API ключ" # мойAPI ключ headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"} data = { "client": { "clientId": "mycompany", "clientVersion": "1.5.2" }, "threatInfo": { "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"], "platformTypes": ["ANY_PLATFORM"], "threatEntryTypes": ["URL"], "threatEntries": [{"url": domain}] } } try: req = urllib.request.Request(url=url, headers=headers, data=json.dumps(data).encode("utf-8")) response = urllib.request.urlopen(req) result = json.loads(response.read().decode("utf-8")) if result.get("matches"): return True else: return False except urllib.error.HTTPError as e: print(f"HTTP Error: {e.code} - {e.reason}") return False # Открытие файла для чтения with open("domains.txt", "r") as file: # Открытие файлов для записи block_file = open("block_domain.txt", "w") white_file = open("white_domain.txt", "w") # Чтение каждой строки файла domains.txt for line in file: domain = line.strip() # Удаление пробелов и переносов строки if check_domain(domain): block_file.write(domain + "n") # Запись в файл block_domain.txt else: white_file.write(domain + "n") # Запись в файл white_domain.txt # Закрытие файлов block_file.close() white_file.close()

Так вот при запуске скрипта он мне выдает:

HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request

HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request HTTP Error: 400 - Bad Request

API ключе верный, никаких ограничений нет. Может сейчас что-то изменилось? Или для Россия какие-то ограничения есть (с vpn та же история)

Дополнительно:

А сам текст респонса возвращается? Ну и судя по неймингу, передавать нужно не домен, а URL

  • Да, при запуске скрипта получаю:
    HTTP Error: 400 - Bad Request
    HTTP Error: 400 - Bad Request
    HTTP Error: 400 - Bad Request
    HTTP Error: 400 - Bad Request

    Или ты про что

  • meusov11, а если URL передать, а не домен?
  • Плюс, авторизация точно через Bearer токен?

    Тут ключ передают либо как GET параметр, либо в хедере X-goog-api-key

    https://cloud.google.com/docs/authentication/api-k...

  • soremix, неа, все равно получаю bad request
  • meusov11, это с попыткой токен по другому передать или нет? В любом случае по хорошему надо прочитать что приходит в ответе. Не код ошибки и его расшифровку, а именно ответ
  • soremix,

    Слушай, получилось! Ошибок никаких не получаю (400 bad request) , но в block_domain ничего не пишется.

    Вот что поменял:

    import urllib.request import json  # Функция проверки безопасности домена на основе сервиса SafeBrowsing def check_domain(domain):     url = "https://safebrowsing.googleapis.com/v4/threatMatches:find"     api_key = "тут мой api ключ"      headers = {"Content-Type": "application/json", "x-goog-api-key": api_key}     data = {         "client": {             "clientId": "mycompany",             "clientVersion": "1.5.2"         },         "threatInfo": {             "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"],             "platformTypes": ["ANY_PLATFORM"],             "threatEntryTypes": ["URL"],             "threatEntries": [{"url": domain}]         }     }     try:         req = urllib.request.Request(url=url, headers=headers, data=json.dumps(data).encode("utf-8"))         response = urllib.request.urlopen(req)         result = json.loads(response.read().decode("utf-8"))         if result.get("matches"):             return True         else:             return False     except urllib.error.HTTPError as e:         print(f"HTTP Error: {e.code} - {e.reason}")         return False  # Открытие файла для чтения with open("domains.txt", "r") as file:     # Открытие файлов для записи     block_file = open("block_domain.txt", "w")     white_file = open("white_domain.txt", "w")          # Чтение каждой строки файла domains.txt     for line in file:         domain = line.strip() # Удаление пробелов и переносов строки         if check_domain(domain):             block_file.write(domain + "n") # Запись в файл block_domain.txt         else:             white_file.write(domain + "n") # Запись в файл white_domain.txt          # Закрытие файлов     block_file.close()     white_file.close()

    import urllib.request import json # Функция проверки безопасности домена на основе сервиса SafeBrowsing def check_domain(domain): url = "https://safebrowsing.googleapis.com/v4/threatMatches:find" api_key = "тут мой api ключ" headers = {"Content-Type": "application/json", "x-goog-api-key": api_key} data = { "client": { "clientId": "mycompany", "clientVersion": "1.5.2" }, "threatInfo": { "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"], "platformTypes": ["ANY_PLATFORM"], "threatEntryTypes": ["URL"], "threatEntries": [{"url": domain}] } } try: req = urllib.request.Request(url=url, headers=headers, data=json.dumps(data).encode("utf-8")) response = urllib.request.urlopen(req) result = json.loads(response.read().decode("utf-8")) if result.get("matches"): return True else: return False except urllib.error.HTTPError as e: print(f"HTTP Error: {e.code} - {e.reason}") return False # Открытие файла для чтения with open("domains.txt", "r") as file: # Открытие файлов для записи block_file = open("block_domain.txt", "w") white_file = open("white_domain.txt", "w") # Чтение каждой строки файла domains.txt for line in file: domain = line.strip() # Удаление пробелов и переносов строки if check_domain(domain): block_file.write(domain + "n") # Запись в файл block_domain.txt else: white_file.write(domain + "n") # Запись в файл white_domain.txt # Закрытие файлов block_file.close() white_file.close()

  • meusov11, тогда логично что функция вернула False. Смотреть содержимое result и доделывать
  • soremix, Так я вот и не знаю как можно переделать. В документации вообще ничего нет
  • meusov11, print(result) что вернул?
  • soremix,
    result = json.loads(response.read().decode("utf-8"))  print(result)

    result = json.loads(response.read().decode("utf-8")) print(result)

    Возвращает:
    {}
    {}
    {}
    {}

  • meusov11, значит всё ок с сайтами

    Note: If there are no matches (that is, if none of the URLs specified in the request are found on any of the lists specified in a request), the HTTP POST response simply returns an empty object in the response body.

  • soremix, Но это неверно, так ка в transparencyreport (гугл проверка сайта) указано что домен небезопасный. Следовательно он должен кидать его в block_domain.txt
  • meusov11, ну это уже к Гуглу вопросы. Есть пример домена такого?
  • soremix, пример, к сожалению, не могу предоставить по своим причинам. Попробовал делать проверку дополнительно через virustotal и cyreport. Вроде получилось. Но опять же, когда как и много чего допиливать нужно
  • API токен должен передаваться в заголовке X-goog-api-key

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для получения API Google для проверок сайта на безопасность, вам необходимо выполнить следующие шаги:

    1. Перейдите на официальный сайт Google Developers Console и авторизуйтесь под своим аккаунтом Google.

    2. Создайте новый проект, нажав на кнопку "Create Project" и введите название проекта.

    3. После создания проекта, перейдите в раздел "APIs & Services" и выберите "Library" из бокового меню.

    4. Найдите и активируйте необходимые API для проверки безопасности сайта, например, Google Safe Browsing API.

    5. Перейдите в раздел "Credentials" и создайте новый ключ API. Выберите тип ключа, который подходит для ваших целей, например, ключ для ограниченного доступа.

    6. После создания ключа API, скопируйте его и используйте в своем коде для проверки безопасности вашего сайта.

    Пример использования API Google для проверки безопасности сайта на PHP:

     array(
    'clientId' => 'YOUR_CLIENT_ID',
    'clientVersion' => '1.0.0'
    ),
    'threatInfo' => array(
    'threatTypes' => array('MALWARE', 'SOCIAL_ENGINEERING'),
    'platformTypes' => array('ANY_PLATFORM'),
    'threatEntryTypes' => array('URL'),
    'threatEntries' => array(
    array('url' => $siteToCheck)
    )
    )
    );

    $options = array(
    'http' => array(
    'header' => "Content-Type: application/json\r

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно