Mostrando postagens com marcador http. Mostrar todas as postagens
Mostrando postagens com marcador http. Mostrar todas as postagens

quarta-feira, 27 de março de 2024

Métodos e códigos HTTP

HTTP oferece suporte a vários métodos para acessar um recurso. No protocolo HTTP, vários métodos de solicitação permitem que o navegador envie informações, formulários ou arquivos ao servidor. Esses métodos são usados, entre outras coisas, para informar ao servidor como processar a solicitação que enviamos e como responder.

Vimos diferentes métodos HTTP usados nas solicitações HTTP testadas nas seções anteriores. Com cURL, se usarmos -v para visualizar a solicitação completa, a primeira linha contém o método HTTP (por exemplo, GET / HTTP/1.1), enquanto com os devtools do navegador (F12), o método HTTP é mostrado na coluna Método. Além disso, os cabeçalhos de resposta também contêm o código de resposta HTTP, que indica o status do processamento de nossa solicitação HTTP.

Métodos de solicitação
A seguir estão alguns dos métodos comumente usados:

GET: Solicita um recurso específico. Dados adicionais podem ser passados ao servidor por meio de strings de consulta na URL (por exemplo, ?param=value).

POST: Envia dados para o servidor. Ele pode lidar com vários tipos de entrada, como texto, PDFs e outras formas de dados binários. Esses dados são anexados ao corpo da solicitação, presente após os cabeçalhos. O método POST é comumente usado ao enviar informações (por exemplo, formulários/logins) ou fazer upload de dados para um site, como imagens ou documentos.

HEAD: Solicita os cabeçalhos que seriam retornados se uma solicitação GET fosse feita ao servidor. Ele não retorna o corpo da solicitação e geralmente é feito para verificar o comprimento da resposta antes de baixar os recursos.

PUT: Cria novos recursos no servidor. Permitir esse método sem controles adequados pode levar ao upload de recursos maliciosos.

DELETE: Exclui um recurso existente no servidor web. Se não for devidamente protegido, pode levar à negação de serviço (DoS), excluindo arquivos críticos no servidor web.

OPTIONS: Retorna informações sobre o servidor, como os métodos por ele aceitos.

PATCH: Aplica modificações parciais ao recurso no local especificado. 

A lista destaca apenas alguns dos métodos HTTP mais comumente usados. A disponibilidade de um método específico depende do servidor e também da configuração do aplicativo. Para obter uma lista completa de métodos HTTP, você pode visitar este link.

Nota: A maioria dos aplicativos web modernos depende principalmente dos métodos GET e POST. No entanto, qualquer aplicativo web que utiliza APIs REST também depende de PUT e DELETE, que são usados para atualizar e excluir dados no endpoint da API, respectivamente. Consulte o módulo Introdução às Aplicações Web para obter mais detalhes.

Códigos de resposta
Os códigos de status HTTP são usados para informar ao cliente o status de sua solicitação. Um servidor HTTP pode retornar cinco tipos de códigos de resposta:

1xx Fornece informações e não afeta o processamento da solicitação.
2xx Retornado quando uma solicitação é bem-sucedida.
3xx Retornado quando o servidor redireciona o cliente.
4xx Significa solicitações indevidas do cliente. Por exemplo, solicitar um recurso que não existe ou solicitar um formato incorreto.
5xx Retornado quando há algum problema com o próprio servidor HTTP. 

A seguir estão alguns dos exemplos comumente vistos de cada um dos tipos de método HTTP acima:

200 OK Retornado em uma solicitação bem-sucedida e o corpo da resposta geralmente contém o recurso solicitado.
302 Found (Encontrado) Redireciona o cliente para outra URL. Por exemplo, redirecionando o usuário para seu painel após um login bem-sucedido.
400 Bad Request Retornado ao encontrar solicitações malformadas, como solicitações com terminadores de linha ausentes.
403 Forbidden (Proibido) Significa que o cliente não tem acesso apropriado ao recurso. Também pode ser retornado quando o servidor detecta uma entrada maliciosa do usuário.
404 Not Found (Não Encontrado) Retornado quando o cliente solicita um recurso que não existe no servidor.
500 Internal Server Error (Erro interno do servidor) Retornado quando o servidor não consegue processar a solicitação.

Para obter uma lista completa dos códigos de resposta HTTP padrão, você pode visitar este link. Além dos códigos HTTP padrão, vários servidores e provedores, como Cloudflare ou AWS, implementam seus próprios códigos.

GET (PEGAR)
Sempre que visitamos qualquer URL(Uniform Resource Locator), nossos navegadores usam como padrão uma solicitação GET para obter os recursos remotos hospedados naquela URL. Assim que o navegador recebe a página inicial que está solicitando; ele pode enviar outras solicitações usando vários métodos HTTP. Isso pode ser observado através da aba Rede no devtools do navegador, conforme visto na seção anterior.

Exercício: Escolha qualquer site de sua preferência e monitore a guia Rede nas ferramentas de desenvolvimento do navegador conforme você o visita para entender o desempenho da página. Essa técnica pode ser usada para entender completamente como uma aplicação web interage com seu back-end, o que pode ser um exercício essencial para qualquer avaliação de aplicação web ou exercício de recompensa de bugs.


Autenticação básica HTTP
Quando visitamos o exercício encontrado no final desta seção, ele nos solicita a inserção de um nome de usuário e uma senha. Ao contrário dos formulários de login usuais, que utilizam parâmetros HTTP para validar as credenciais do usuário (por exemplo, solicitação POST), este tipo de autenticação utiliza uma autenticação HTTP básica, que é tratada diretamente pelo servidor web para proteger uma página/diretório específico, sem interagir diretamente com o aplicativo da web.

Para acessar a página, temos que inserir um par válido de credenciais, que neste caso são admin:admin:

http://<SERVER_IP>:<PORT>/

 

Assim que inserirmos as credenciais, teremos acesso à página: 

http://<SERVER_IP>:<PORT>/

 Vamos tentar acessar a página com cURL e adicionaremos -i para visualizar os cabeçalhos de resposta:

 

venelouis@vene$ curl -i http://<SERVER_IP>:<PORT>/
HTTP/1.1 401 Authorization Required
Date: Mon, 21 Feb 2022 13:11:46 GMT
Server: Apache/2.4.41 (Ubuntu)
Cache-Control: no-cache, must-revalidate, max-age=0
WWW-Authenticate: Basic realm="Access denied"
Content-Length: 13
Content-Type: text/html; charset=UTF-8

Access denied

Como podemos ver, obtemos Acesso negado no corpo da resposta e também obtemos Basic realm="Access negado" no cabeçalho WWW-Authenticate, o que confirma que esta página realmente usa autenticação HTTP básica, conforme discutido na seção Headers (Cabeçalhos). Para fornecer as credenciais por meio de cURL, podemos usar o sinalizador -u, como segue:

venelouis@vene$ curl -u admin:admin http://<SERVER_IP>:<PORT>/

<!DOCTYPE html>
<html lang="en">

<head>
...SNIP...

Desta vez, obtemos a página na resposta. Existe outro método pelo qual podemos fornecer as credenciais básicas de autenticação HTTP, que é diretamente por meio da URL como (nome de usuário: senha@URL), conforme discutimos na primeira seção. Se tentarmos o mesmo com cURL ou nosso navegador, também teremos acesso à página:

venelouis@vene$ curl http://admin:admin@<SERVER_IP>:<PORT>/

<!DOCTYPE html>
<html lang="en">

<head>
...SNIP...

Também podemos tentar visitar o mesmo URL em um navegador e também devemos ser autenticados.

Exercício: Tente visualizar os cabeçalhos de resposta adicionando -i à solicitação acima e veja como uma resposta autenticada difere de uma não autenticada.

Cabeçalho de autorização HTTP
Se adicionarmos a flag -v a qualquer um dos nossos comandos cURL anteriores:

venelouis@venelouis$ curl -v http://admin:admin@<SERVER_IP>:<PORT>/

*   Trying <SERVER_IP>:<PORT>...
* Connected to <SERVER_IP> (<SERVER_IP>) port PORT (#0)
* Server auth using Basic with user 'admin'
> GET / HTTP/1.1
> Host: <SERVER_IP>
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.77.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 21 Feb 2022 13:19:57 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Cache-Control: no-store, no-cache, must-revalidate
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 1453
< Content-Type: text/html; charset=UTF-8
< 

<!DOCTYPE html>
<html lang="en">

<head>
...SNIP...

Como estamos usando autenticação HTTP básica, vemos que nossa solicitação HTTP define o cabeçalho de autorização como Basic YWRtaW46YWRtaW4=, que é o valor codificado em base64 de admin:admin. Se estivéssemos usando um método moderno de autenticação (por exemplo, JWT), a Autorização seria do tipo Bearer e conteria um token criptografado mais longo.

Vamos tentar definir manualmente a Autorização, sem fornecer as credenciais, para ver se ela nos permite acesso à página. Podemos definir o cabeçalho com a flag -H e usaremos o mesmo valor da solicitação HTTP acima. Podemos adicionar a flag -H várias vezes para especificar vários cabeçalhos:

venelouis@vene$ curl -H 'Authorization: Basic YWRtaW46YWRtaW4=' 
http://
<SERVER_IP>:<PORT>/ <!DOCTYPE html <html lang="en"> <head> ...SNIP...

Como vemos, isso também nos deu acesso à página. Estes são alguns métodos que podemos usar para autenticar a página. A maioria dos aplicativos da web modernos usa formulários de login criados com linguagem de script de back-end (por exemplo, PHP), que utiliza solicitações HTTP POST para autenticar os usuários e, em seguida, retornar um cookie para manter sua autenticação.

Parâmetros GET
Uma vez autenticados, temos acesso a uma função City Search, na qual podemos inserir um termo de pesquisa e obter uma lista de cidades correspondentes:

À medida que a página retorna nossos resultados, ela pode entrar em contato com um recurso remoto para obter as informações e, em seguida, exibi-las na página. Para verificar isso, podemos abrir o devtools do navegador e ir até a aba Rede, ou usar o atalho [CTRL+SHIFT+E] para chegar à mesma aba. Antes de inserirmos nosso termo de pesquisa e visualizarmos as solicitações, talvez seja necessário clicar no ícone da lixeira no canto superior esquerdo, para garantir que limpamos todas as solicitações anteriores e monitoramos apenas as solicitações mais recentes:

 network_clear_requests

Depois disso, podemos inserir qualquer termo de pesquisa e pressionar Enter, e notaremos imediatamente uma nova solicitação sendo enviada ao backend:

 network_clear_requests

Quando clicamos na solicitação, ela é enviada para search.php com o parâmetro GET search=le usado na URL. Isso nos ajuda a entender que a função de pesquisa solicita outra página para os resultados.

Agora, podemos enviar a mesma solicitação diretamente para search.php para obter os resultados completos da pesquisa, embora provavelmente os retorne em um formato específico (por exemplo, JSON) sem ter o layout HTML mostrado na imagem acima.

Para enviar uma solicitação GET com cURL, podemos usar exatamente o mesmo URL visto nas capturas de tela acima, pois as solicitações GET colocam seus parâmetros no URL. No entanto, os devtools do navegador fornecem um método mais conveniente de obter o comando cURL. Podemos clicar com o botão direito na solicitação e selecionar Copiar>Copiar como cURL. Então, podemos colar o comando copiado em nosso terminal e executá-lo, e devemos obter exatamente a mesma resposta:

venelouis@vene$ curl 'http://<SERVER_IP>:<PORT>/search.php?search=le' -H  
'Authorization: Basic YWRtaW46YWRtaW4='
Leeds (UK) Leicester (UK)

Nota: O comando copiado conterá todos os cabeçalhos usados na solicitação HTTP. No entanto, podemos remover a maioria deles e manter apenas os cabeçalhos de autenticação necessários, como o cabeçalho Authorization.

Também podemos repetir a solicitação exata diretamente nas ferramentas de desenvolvimento do navegador, selecionando Copiar>Copiar como busca. Isso copiará a mesma solicitação HTTP usando a biblioteca JavaScript Fetch. Então, podemos ir para a aba do console JavaScript clicando em [CTRL+SHIFT+K], colar nosso comando Fetch e pressionar enter para enviar a solicitação:

network_clear_requests

 https://www.youtube.com/watch?v=ytn5kTFSj8I 

 


segunda-feira, 11 de março de 2024

PEDIDOS DA WEB (WEB REQUESTS)

Protocolo de transferência de hipertexto seguro
(HTTPS: Hypertext Transfer Protocol Secure)
 

Em uma seção anterior, discutimos como as solicitações HTTP são enviadas e processadas. No entanto, uma das desvantagens significativas do HTTP é que todos os dados são transferidos em texto não criptografado. Isso significa que qualquer pessoa entre a origem e o destino pode realizar um ataque Man-in-the-middle (MiTM) para visualizar os dados transferidos.

Para combater esse problema, foi criado o protocolo HTTPS (HTTP Secure), no qual todas as comunicações são transferidas em formato criptografado, de forma que, mesmo que terceiros interceptem a solicitação, não conseguirão extrair os dados dela. Por esse motivo, o HTTPS se tornou o esquema principal para sites na Internet, e o HTTP está sendo eliminado e em breve a maioria dos navegadores não permitirá a visita a sites HTTP.

Visão geral do HTTPS
Se examinarmos uma solicitação HTTP, podemos ver o efeito de não impor comunicações seguras entre um navegador web e uma aplicação web. Por exemplo, a seguir está o conteúdo de uma solicitação de login HTTP:

http_clear

Podemos ver que as credenciais de login podem ser visualizadas em texto não criptografado. Isso tornaria mais fácil para alguém na mesma rede (como uma rede sem fio pública) capturar a solicitação e reutilizar as credenciais para fins maliciosos.

Por outro lado, quando alguém intercepta e analisa o tráfego de uma solicitação HTTPS, verá algo como o seguinte:

https_google_enc

Como podemos ver, os dados são transferidos como um único fluxo criptografado, o que torna muito difícil para qualquer pessoa capturar informações como credenciais ou quaisquer outros dados confidenciais.

Os sites que aplicam HTTPS podem ser identificados por https:// em seu URL (por exemplo, https://www.google.com), bem como pelo ícone de cadeado na barra de endereço do navegador, à esquerda do URL:

https_google

Portanto, se visitarmos um site que utiliza HTTPS, como o Google, todo o tráfego será criptografado.

Observação: embora os dados transferidos por meio do protocolo HTTPS possam ser criptografados, a solicitação ainda poderá revelar o URL visitado se entrar em contato com um servidor DNS de texto não criptografado. Por esse motivo, é recomendável utilizar servidores DNS criptografados (por exemplo, 8.8.8.8 ou 1.1.1.1) ou utilizar um serviço VPN para garantir que todo o tráfego seja devidamente criptografado.

Fluxo HTTPS
Vejamos como o HTTPS opera em alto nível:

HTTPS_Flow

Se digitarmos http:// em vez de https:// para visitar um site que aplica HTTPS, o navegador tentará resolver o domínio e redirecionará o usuário para o servidor web que hospeda o site de destino. Uma solicitação é enviada primeiro para a porta 80, que é o protocolo HTTP não criptografado. O servidor detecta isso e redireciona o cliente para a porta HTTPS 443 segura. Isso é feito por meio do código de resposta 301 Moved Permanently, que discutiremos em uma próxima seção.

Em seguida, o cliente (navegador web) envia um pacote “client hello”, fornecendo informações sobre si mesmo. Depois disso, o servidor responde com “server hello”, seguido de uma troca de chaves para troca de certificados SSL. O cliente verifica a chave/certificado e envia um próprio. Depois disso, um handshake criptografado é iniciado para confirmar se a criptografia e a transferência estão funcionando corretamente.

Depois que o handshake for concluído com êxito, a comunicação HTTP normal continuará, que será criptografada depois disso. Esta é uma visão geral de alto nível da troca de chaves, que está além do escopo deste módulo.

Nota: Dependendo das circunstâncias, um invasor pode executar um ataque de downgrade HTTP, que rebaixa a comunicação HTTPS para HTTP, fazendo com que os dados sejam transferidos em texto não criptografado. Isso é feito configurando um proxy Man-In-The-Middle (MITM) para transferir todo o tráfego através do host do invasor sem o conhecimento do usuário. No entanto, a maioria dos navegadores, servidores e aplicações web modernos protegem contra esse ataque.

cURL para HTTPS
cURL deve lidar automaticamente com todos os padrões de comunicação HTTPS e executar um handshake seguro e, em seguida, criptografar e descriptografar os dados automaticamente. No entanto, se alguma vez entrarmos em contato com um site com um certificado SSL inválido ou desatualizado, o cURL, por padrão, não prosseguirá com a comunicação para proteção contra os ataques MITM mencionados anteriormente:

Terminal:

venelouis@venelouis$ curl https://inlanefreight.com

curl: (60) SSL certificate problem: Invalid certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
...SNIP...

Os navegadores modernos fariam o mesmo, alertando o usuário contra a visita a um site com um certificado SSL inválido.

Podemos enfrentar esse problema ao testar um aplicativo Web local ou com um aplicativo Web hospedado para fins práticos, pois esses aplicativos Web podem ainda não ter implementado um certificado SSL válido. Para pular a verificação do certificado com cURL, podemos usar o sinalizador -k:

Terminal:

venelouis@venelouis$ curl -k https://inlanefreight.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
...SNIP...


Como podemos perceber, a solicitação foi processada neste momento e recebemos os dados da resposta.

Solicitações e respostas HTTP (requests and responses)
As comunicações HTTP consistem principalmente em uma solicitação HTTP e uma resposta HTTP. Uma solicitação HTTP é feita pelo cliente (por exemplo, cURL/navegador) e processada pelo servidor (por exemplo, servidor web). As solicitações contêm todos os detalhes que solicitamos do servidor, incluindo o recurso (por exemplo, URL, caminho, parâmetros), quaisquer dados da solicitação, cabeçalhos ou opções que especificamos e muitas outras opções que discutiremos ao longo deste módulo.

Depois que o servidor recebe a solicitação HTTP, ele a processa e responde enviando a resposta HTTP, que contém o código de resposta, conforme discutido em uma seção posterior, e pode conter os dados do recurso se o solicitante tiver acesso a ele.

Solicitação HTTP (request)
Vamos começar examinando o seguinte exemplo de solicitação HTTP:

raw_request

A imagem acima mostra uma solicitação HTTP GET para o URL:

  • http://inlanefreight.com/users/login.html

A primeira linha de qualquer solicitação HTTP contém três campos principais ‘separados por espaços’:

  • Campo/ Área: Método 
  • Exemplo: GET (pegar, receber, obter)
  • Descrição: O método ou verbo HTTP, que especifica o tipo de ação a ser executada.
  • Campo/ Área: Path (caminho)
  • Exemplo: /users/login.html
  • Descrição: O caminho para o recurso que está sendo acessado. Este campo também pode ser sufixado com uma string de consulta (por exemplo, ?username=user).
  • Campo / Área: Versão
  • Exemplo: HTTP/1.1
  • Descrição: O terceiro e último campo é usado para indicar a versão HTTP.

O próximo conjunto de linhas contém pares de valores de cabeçalho HTTP, como Host, User-Agent, Cookie e muitos outros cabeçalhos possíveis. Esses cabeçalhos são usados para especificar vários atributos de uma solicitação. Os cabeçalhos terminam com uma nova linha, necessária para que o servidor valide a solicitação. Finalmente, uma solicitação pode terminar com o corpo e os dados da solicitação.

Nota: O HTTP versão 1.X envia solicitações como texto não criptografado e usa um caractere de nova linha para separar campos e solicitações diferentes. O HTTP versão 2.X, por outro lado, envia solicitações como dados binários em formato de dicionário.

Resposta HTTP (response)
Depois que o servidor processa nossa solicitação, ele envia sua resposta. A seguir está um exemplo de resposta HTTP:

raw_response

A primeira linha de uma resposta HTTP contém dois campos separados por espaços. A primeira é a versão HTTP (por exemplo, HTTP/1.1) e a segunda denota o código de resposta HTTP (por exemplo, 200 OK).

Os códigos de resposta são usados para determinar o status da solicitação, conforme será discutido em uma seção posterior. Após a primeira linha, a resposta lista seus cabeçalhos, semelhante a uma solicitação HTTP. Os cabeçalhos de solicitação e resposta serão discutidos na próxima seção.

Finalmente, a resposta pode terminar com um corpo de resposta, que é separado por uma nova linha após os cabeçalhos. O corpo da resposta geralmente é definido como código HTML. No entanto, ele também pode responder com outros tipos de código, como JSON, recursos de sites como imagens, folhas de estilo ou scripts, ou até mesmo um documento como um documento PDF hospedado no servidor web.

cURL
Em nossos exemplos anteriores com cURL, especificamos apenas a URL e obtivemos o corpo da resposta em troca. No entanto, cURL também nos permite visualizar a solicitação HTTP completa e a resposta HTTP completa, o que pode ser muito útil ao realizar testes de penetração na web ou escrever explorações. Para visualizar a solicitação e a resposta HTTP completas, podemos simplesmente adicionar o sinalizador -v detalhado aos nossos comandos anteriores, e ele deve imprimir a solicitação e a resposta:

Terminal:

venelouis@venelouis$ curl inlanefreight.com -v

*   Trying SERVER_IP:80...
* TCP_NODELAY set
* Connected to inlanefreight.com (SERVER_IP) port 80 (#0)
> GET / HTTP/1.1
> Host: inlanefreight.com
> User-Agent: curl/7.65.3
> Accept: */*
> Connection: close
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Tue, 21 Jul 2020 05:20:15 GMT
< Server: Apache/X.Y.ZZ (Ubuntu)
< WWW-Authenticate: Basic realm="Restricted Content"
< Content-Length: 464
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>

...SNIP...


Como podemos ver, desta vez obtemos a solicitação e a resposta HTTP completas. A solicitação simplesmente enviou GET/HTTP/1.1 junto com os cabeçalhos Host, User-Agent e Accept. Em troca, a resposta HTTP continha HTTP/1.1 401 Unauthorized, o que indica que não temos acesso ao recurso solicitado, como veremos em uma próxima seção. Semelhante à solicitação, a resposta também continha vários cabeçalhos enviados pelo servidor, incluindo Data, Comprimento do Conteúdo e Tipo de Conteúdo. Finalmente, a resposta continha o corpo da resposta em HTML, que é o mesmo que recebemos anteriormente ao usar cURL sem o sinalizador -v.

Exercício: O sinalizador -vvv mostra uma saída ainda mais detalhada. Tente usar esse sinalizador para ver quais detalhes extras de solicitação e resposta são exibidos com ele.

Ferramentas de desenvolvimento do navegador
A maioria dos navegadores modernos vem com ferramentas de desenvolvedor integradas (DevTools), que se destinam principalmente aos desenvolvedores testarem seus aplicativos da web. No entanto, como testadores de penetração na web, essas ferramentas podem ser um ativo vital em qualquer avaliação da web que realizamos, já que um navegador (e suas DevTools) estão entre os ativos que provavelmente teremos em todos os exercícios de avaliação da web. Neste módulo, também discutiremos como utilizar algumas das ferramentas básicas de desenvolvimento do navegador para avaliar e monitorar diferentes tipos de solicitações da web.

Sempre que visitamos qualquer site ou acessamos qualquer aplicativo da web, nosso navegador envia diversas solicitações da web e processa diversas respostas HTTP para renderizar a visualização final que vemos na janela do navegador. Para abrir os devtools do navegador no Chrome ou Firefox, podemos clicar em [CTRL+SHIFT+I] ou simplesmente clicar em [F12]. Os devtools contêm várias guias, cada uma com seu próprio uso. Estaremos nos concentrando principalmente na guia Rede neste módulo, pois ela é responsável pelas solicitações da web.

Se clicarmos na aba Rede e atualizarmos a página, poderemos ver a lista de solicitações enviadas pela página:

devtools_network_requests

Como podemos ver, os devtools nos mostram rapidamente o status da resposta (ou seja, código de resposta), o método de solicitação usado (GET), o recurso solicitado (ou seja, URL/domínio), junto com o caminho solicitado. Além disso, podemos usar Filtrar URLs para pesquisar uma solicitação específica, caso o site carregue muitas para ser processado.




Postagens mais visitadas

Postagem em destaque

IA para escrever e se comunicar