
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@crawly/proxy-log-request-client
Advanced tools
Este projeto tem o objetivo de disponibilizar um plugin que irá fazer um log das requisições em nossa biblioteca request-client.
Instalando o projeto:
npm i --save @crawly/proxy-log-request-client
A biblioteca divide as funcionalidades em 2 grupos: Loggers e Transports. Os transports são as classses responsáveis por enviar a informação para algum lugar, cada transport envia a informação apenas para um lugar, essa informação é recebida de um logger. Os logger são as classes responsáveis por obter as informações e enviá-las, quando necessário, para os transports. Exemplificando, a comunicação poderia ser algo como: Temos um logger que obtem as informações apenas quando as requisições derem erro e um transport que envia para o redis, então quando a requisição resultar em erro, o logger obtém as informações do proxy e envia para o transport, que por sua vez irá armazenar a informação no redis. Obviamente, os transports e os loggers praticamente não são correlacionados, então você pode usar qualquer transport para qualquer logger.
Atualmente temos 5 informações que são armazenadas, sendo:
error
ou info
;.proxy()
na lib de request;Todas essas 5 informações são armazenadas em JSON com a seguinte estrutura:
{
"message": "",
"level": "info",
"proxyIp": "",
"proxy": "",
"externalIp": ""
}
É importante saber também que o Proxy definido na lib de request, caso tenha alguma senha, ela será mascarada por asteriscos, por exemplo:
Se temos http://username:password@zproxy.lum-superproxy.io:22225
, o resultado será: http://username:********@zproxy.lum-superproxy.io:22225
.
Basicamente você irá utilizar um logger baseado na situação que você quer que seja logado (sucesso ou erro) com os transports que representam onde a informação será disponibilizada (redis, console, etc.).
Loggers disponíveis:
Transports disponíveis:
Para se utilizar, basta instanciar um Logger, informando a mensagem que será logada e os transports que serão utilizados:
import { Request } from '@crawly/request-client';
import { SuccessLogger, RedisTransport, ConsoleTransport } from '@crawly/proxy-log-request-client';
new Request()
.queryString({
format: 'json'
})
.proxy('10.10.10.10')
.use((new SuccessLogger('Ipify Success', [ new RedisTransport(), new ConsoleTransport() ])).install())
.get('https://api.ipify.org/')
Atenção: O log só irá funcionar se a requisição onde a biblioteca for instalada estiver utilizando
um proxy e se o ambiente estiver com a váriavel de ambiente PROXY_LOG_IS_ENABLED
com o valor true
.
Para desabilitar os logs por váriavel de ambiente, basta definir PROXY_LOG_IS_ENABLED
com o valor false
.
A mensagem que será informada no logger pode conter algumas expressões que podem ser sobreescrevidas para detalhar melhor o log. As expressões disponíveis:
{proxyIp}
será substituído pelo IP que o Proxy disponibilizou (que o alvo recebe);{externalIp}
será substituído pelo IP externo da maquina que o serviço está rodando, obtido na URL http://ipv4bot.whatismyipaddress.com/;{proxy}
será substituído pelo proxy definido ao se utilizar a biblioteca de rquests.Então se tivermos uma mensagem como:
Requisição feita com o {proxy} que disponibilizou o IP {proxyIp} na maquina com o IP externo {externalIp}
O resultado seria algo assim (exemplo):
Requisição feita com o 10.10.10.10 que disponibilizou o IP 186.20.37.40 na maquina com o IP externo 200.30.63.102
Esse logger é responsável por armazenar toda vez que uma requisição for concluída com sucesso, inclusive em retentativas (.retry()
). Caso
o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação não será armazenada.
O logger está disponível com a classe SuccessLogger
:
import { SuccessLogger } from '@crawly/proxy-log-request-client'
Esse logger é responsável por armazenar toda vez que uma requisição falhar, inclusive em retentativas (.retry()
). Caso
o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação será armazenada.
O logger está disponível com a classe ErrorLogger
:
import { ErrorLogger } from '@crawly/proxy-log-request-client'
Esse transport é responsável por armazenar a informação no redis.
É possível informar algumas opções ao instanciar a classe, mas esses valores não são obrigatórios pois caso não informados, eles tem valores padrões. Além disso, caso você não forneça os valores ao instanciar a classe, pode ser possível definir esses valores globalmente pelas váriaveis de ambiente. Os valores são:
host
é o IP onde o servidor do redis está, por padrão o valor é localhost
e pode ser informado também pela váriavel de ambiente LOG_REDIS_HOST
;port
é a porta usada para se conectar ao redis, por padrão o valor é 6379
e pode ser informado também pela váriavel de ambiente LOG_REDIS_PORT
;container
é a chave da lista onde será armazenado os logs, por padrão o valor é proxy
e pode ser informado também pela váriavel de ambiente LOG_REDIS_CONTAINER
.O transport está disponível com a classe RedisTransport
:
import { RedisTransport } from '@crawly/proxy-log-request-client'
Esse transport é responsável por disponibilizar a informação no console.
O transport está disponível com a classe ConsoleTransport
:
import { ConsoleTransport } from '@crawly/proxy-log-request-client'
FAQs
A awesome project
The npm package @crawly/proxy-log-request-client receives a total of 2 weekly downloads. As such, @crawly/proxy-log-request-client popularity was classified as not popular.
We found that @crawly/proxy-log-request-client demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.