Validação do lado do cliente
Neste capítulo, aprenderemos como a validação ajuda no Python Pentesting.
O objetivo principal da validação é testar e garantir que o usuário forneceu as informações necessárias e devidamente formatadas para concluir uma operação com êxito.
Existem dois tipos diferentes de validação -
- validação do lado do cliente (navegador da web)
- validação do lado do servidor
Validação do lado do servidor e validação do lado do cliente
A validação de entrada do usuário que ocorre no lado do servidor durante uma sessão de postback é chamada server-side validation. As linguagens como PHP e ASP.Net usam validação do lado do servidor. Depois que o processo de validação no lado do servidor termina, o feedback é enviado de volta ao cliente, gerando uma nova página da web dinâmica. Com a ajuda da validação do lado do servidor, podemos obter proteção contra usuários mal-intencionados.
Por outro lado, a validação de entrada do usuário que ocorre no lado do cliente é chamada de validação do lado do cliente. Linguagens de script como JavaScript e VBScript são usadas paraclient-side validation. Nesse tipo de validação, toda validação de entrada do usuário é feita apenas no navegador do usuário. Não é tão seguro quanto a validação do lado do servidor porque o hacker pode facilmente contornar nossa linguagem de script do lado do cliente e enviar entradas perigosas para o servidor.
Parâmetro de temperamento do lado do cliente: Bypass de validação
A passagem de parâmetros no protocolo HTTP pode ser feita com a ajuda dos métodos POST e GET. GET é usado para solicitar dados de um recurso especificado e POST é usado para enviar dados a um servidor para criar ou atualizar um recurso. Uma das principais diferenças entre os dois métodos é que, se um site estiver usando o método GET, os parâmetros de passagem são mostrados na URL e podemos alterar esse parâmetro e passá-lo ao servidor da web. Por exemplo, a string de consulta (pares nome / valor) é enviada no URL de uma solicitação GET:/test/hello_form.php?name1 = value1&name2 = value2. Por outro lado, os parâmetros não são mostrados durante o uso do método POST. Os dados enviados para o servidor com POST são armazenados no corpo da solicitação HTTP. Por exemplo, POST/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.
Módulo Python para Bypass de Validação
O módulo Python que vamos usar é mechanize. É um navegador Python, que fornece a facilidade de obter formulários da web em uma página da web e também facilita o envio de valores de entrada. Com a ajuda de mecanizar, podemos contornar os parâmetros de validação e temperar do lado do cliente. No entanto, antes de importá-lo em nosso script Python, precisamos instalá-lo executando o seguinte comando -
pip install mechanize
Exemplo
A seguir está um script Python, que usa mecanizar para ignorar a validação de um formulário da web usando o método POST para passar o parâmetro. O formulário da web pode ser obtido no link e pode ser usado em qualquer site fictício de sua escolha.
Para começar, vamos importar o navegador mecanizar -
import mechanize
Agora, vamos criar um objeto chamado brwsr do navegador mecanizar -
brwsr = mechanize.Browser()
A próxima linha de código mostra que o agente do usuário não é um robô.
brwsr.set_handle_robots( False )
Agora, precisamos fornecer o url do nosso site fictício contendo o formulário da web no qual precisamos ignorar a validação.
url = input("Enter URL ")
Agora, as linhas seguintes definirão alguns pais como verdadeiros.
brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)
Em seguida, ele abrirá a página da web e imprimirá o formulário da web nessa página.
brwsr.open(url)
for form in brwsr.forms():
print form
A próxima linha de códigos irá ignorar as validações nos campos fornecidos.
brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()
A última parte do script pode ser alterada de acordo com os campos do formulário da web em que queremos ignorar a validação. Aqui no script acima, pegamos dois campos -‘name’ e ‘gender’ que não pode ser deixado em branco (você pode ver na codificação do formulário da web), mas este script irá ignorar essa validação.