Привет всем, в этой статье я поделюсь своим опытом работы с Brave Shield и как мне удалось его обнаружить, в основном я создавал веб-сайт для клиента, используя ReactJS и Golang для REST API, все было размещено с использованием AWS Lambda, S3 и API. Gateway, поэтому мой способ обнаружения будет основан на этом «хостинге», но я уверен, что вы сможете использовать его в другом месте, когда это необходимо.

Моя проблема с Brave Browser заключалась в том, что когда его экран был включен, пользователи не могли войти в систему из-за того, что «сеанс» обрабатывался с помощью файла cookie JWT и что Brave Shield не хранит файлы cookie третьей части (API был не в том же домене, что и остальная часть веб-сайта).

Если подумать, это довольно простой способ обнаружения: вы пытаетесь установить сторонний файл cookie с помощью одного запроса и пытаетесь прочитать его с помощью другого, в основном используя два запроса, которые вы можете обнаружить, если Brave Shield включен, вот пример кода для моей лямбда-функции Golang, чтобы определить это.

package main
import (
	"github.com/aws/aws-lambda-go/lambda"
	"github.com/aws/aws-lambda-go/events"
	"encoding/json"
	"fmt"
	"regexp"
)
type Response struct {
	Status string `json:"status"`
	Message string `json:"message"`
}
func CookieCheck(req events.APIGatewayProxyRequest)(events.APIGatewayProxyResponse, error){
	header := make(map[string]string)
	header["Access-Control-Allow-Origin"] = req.Headers["origin"]
	header["Access-Control-Allow-Credentials"] = "true"
	res := &Response{
	  Status : "success",
	  Message: "test",
	}
	response, _ := json.Marshal(res)
	if req.HTTPMethod == "GET" {
		header["Set-Cookie"] = fmt.Sprintf("token=TEST; path=/")
	} else {
		re := regexp.MustCompile("token=([^;]+)")
		regex := re.FindStringSubmatch(req.Headers["cookie"])
		if len(regex) < 2 || regex[1] != "TEST" {
			res.Status = "error"
			resp2, _ := json.Marshal(res)
			return events.APIGatewayProxyResponse{
				Headers: header,
			    StatusCode: 403,
			    Body:       string(resp2),
			}, nil
		}
	}
	return events.APIGatewayProxyResponse{
		Headers: header,
	    StatusCode: 200,
	    Body:       string(response),
	}, nil
}
func main() {
	lambda.Start(CookieCheck)
}

Следующим шагом является добавление ресурса шлюза API для выполнения этого кода, у него должно быть два метода (или один с методом ANY), один из них GET, другой может быть любым, кстати, я буду использовать POST метод для следующего фрагмента, единственное важное примечание — установить флажок «Использовать интеграцию прокси-сервера Lambda» при создании метода/методов.

Вот фрагмент кода js, который можно использовать для обнаружения Brave Shield.

fetch(
      "https://{restapi-id}.execute-api.{region}.amazonaws.com/{stageName}/{resourceName}",
      {
        method: "GET",
        credentials: "include",
      }
    )
      .then(res => res.json())
      .then(result => {
        if (result.status == "success") { // The get request was successfull and the cookie should be set
fetch(
            "https://{restapi-id}.execute-api.{region}.amazonaws.com/{stageName}/{resourceName}",
            {
              method: "POST",
              credentials: "include",
            }
          )
            .then(res => res.json())
            .then(result => { // Now we see if the cookie is actually set
              if (result.status != "success") {
                
                alert("BRAVE SHIELD"); // Brave shield is enabled
}
            });
}
        else {
          alert("BRAVE SHIELD"); // This probably will never trigger, yet it's better safe than sorry
        }
      });

Не стесняйтесь задавать любые вопросы и использовать этот код по своему усмотрению, извините за мой плохой английский, так как я не являюсь носителем языка.

Ваше здоровье :)