Привет всем, в этой статье я поделюсь своим опытом работы с 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 } });
Не стесняйтесь задавать любые вопросы и использовать этот код по своему усмотрению, извините за мой плохой английский, так как я не являюсь носителем языка.
Ваше здоровье :)