📖
Introducao à segurança digital
  • Introdução à Segurança Digital
  • Introdução a Linux
  • Criptografia
    • Introdução
    • Definições e Objetivos
    • Criptografia Clássica
    • Criptografia Moderna
    • Guia de Python para criptografia
  • Redes
    • Ataques
      • Arp Cache Poisoning
      • DNS Cache Poisoning
      • Slow Loris
      • Syn Flood
      • WPA Cracking
      • Deauth
    • Ferramentas
      • Resumo das Ferramentas
      • Suíte Aircrack
      • Wireshark
      • Netcat
      • Nmap
      • Netstat
      • Kathará
    • Pacote & Protocolo
    • Camada de Rede
    • Camada de Transporte
    • IANA
    • Three-way Handshake
    • DHCP
    • DNS
    • NAT
    • Pentest
      • FTP
      • SMB
      • SSH
      • VPN
    • Avançado
  • Web
    • Semana 1
      • Introdução à Web
      • Entendendo as URLs
      • Introdução ao HTML e ao CSS
      • Directory Traversal
      • Introdução ao Javascript
      • Cross Site Scripting (XSS)
      • Cookies e sessões
      • Protocolo HTTP
      • Protocolo HTTPS
      • 2020 - XML External Entities (XML) Injection
    • Semana 2
      • Servidores Web
      • PHP (Programação server-side)
      • Command Injection
      • Cookie Poisoning
      • Bancos de Dados
      • SQL Injection
      • Insecure Direct Object Reference (IDOR)
      • 2020 - Portas e Serviços
      • 2020 - API's e Serviços Rest
  • CTF
  • Engenharia Reversa
    • Arquivos
    • Registradores e tipos de dados
    • Hello World em x86
    • Pilha
    • GDB
    • Ghidra
  • Pwning
    • Integer Overflow
    • Buffer Overflow
    • Pwntools
    • Shellcode
    • Proteções
  • Hardware
    • Introdução ao Hardware Hacking
    • Introdução ao Infravermelho
Powered by GitBook
On this page
  • 1. Quais linguagens de programação são utilizadas na Web?
  • 2. O que é o PHP?
  • 3. Sintaxe, Variáveis e Operadores
  • 4. Acessando os dados da Requisição
  • 5. De início quanto devo me aprofundar?

Was this helpful?

  1. Web
  2. Semana 2

PHP (Programação server-side)

PreviousServidores WebNextCommand Injection

Last updated 4 years ago

Was this helpful?

Como vimos anteriormente, conteúdos gerados dinâmicamente geralmente executam alguma linguagem de programação por trás dos panos. Nesta aula iremos trazer um paradigma geral sobre as linguagens mais usadas para o desenvolvimento de aplicações Web dando enfoque à linguagem PHP.

Obs: se você já se sente confortável com desenvolvimento Web e PHP, sinta-se a vontade para avançar para os próximos tópicos.

1. Quais linguagens de programação são utilizadas na Web?

Relembrando a aula anterior, servidores web são computadores que possuem alguma aplicação agindo como Servidor HTTP e processando as requisições.

Na teoria, portanto, você pode comandar essa aplicação para enviar requisições para um programa escrito em qualquer linguagem que você desejar (obviamente, você teria que se atentar às especificações ao integrar o servidor HTTP ao seu programa, garantindo que o mesmo recebesse e retornasse os dados corretamente).

Na prática, existem certas linguagens que costumam ser mais adotadas pelos desenvolvedores devido a alguns fatores. Vamos citar abaixo alguns deles.

  • Facilidade: apesar de ser possível utilizar qualquer linguagem na hora de desenvolver um sistema web, algumas delas já possuem de antemão o ferramental necessário para lidar com as requisições recebidas do servidor. O , por exemplo, se tornou popular devido à baixa curva de aprendizado e à rapidez quando integrado ao Apache Web Server.

  • Frameworks: muitas linguagens de próposito geral já possuem framewoks que facilitam no desenvolvimento web. Dentro vários, podemos citar, por exemplo, o framework para python e o para Ruby.

  • Eficiência ou Segurança: muitos sistemas precisam lidar com questões de desempenho e a escolha da linguagem muitas vezes impacta nesse fator. A linguagem , por exemplo, é muito empregada em sistemas cujo uso da memória precisa ser seguro e eficiente. Já o foi criado pensando em aplicações que necessitam de escalabilidade.

  • Gosto pessoal: por fim, a zona de conforto do responsável pelo sistema também influencia muito na hora de escolher uma linguagem, uma vez que cada linguagem possui suas decisões de projeto, paradigmas, se é tipada/não tipada, se é compilada ou interpretada etc.

Linguagens de Programação Web

Nos challs utilizados no Ping (assim como em muitos outros CTF's pela web) iremos utilizar, majoritariamente o PHP exatamente pelo fator de facilidade para principiantes de programação web. Vamos, portanto, dar uma breve olhada em como essa linguagem funciona na prática.

2. O que é o PHP?

O PHP se trata de uma linguagem de script de propósito geral criada em 1994 por Rasmus Lerdof. Ela nasceu nos primórdios da web como uma ferramenta voltada para a criação de sites e se tornou uma das mais conhecidas do meio. Essa linguagem é responsável por uma grande parcela dos sites que compõem a web e ainda recebe diversas atualizações. Vejamos então um exemplo de script utilizando essa linguagem.

<html>
 <head>
  <title>Super Ultra Website</title>
 </head>
 <body>
     <?php echo "<p>Olá Mundo!</p>"; ?>
 </body>
</html>

Arquivo: index.php

Primeiramente podemos notar que há uma visível mistura de HTML com scripts PHP inseridos no meio, isso se deve a própria natureza da linguagem que nasceu para facilitar a criação de páginas dinâmicas para web. As tags <?php ...código... ?> permitem que o interpretador saiba diferenciar quais conteúdos devem ser de fato executados e quais devem apenas ser retornadas como estão.

Todos os arquivos devem terminar com o tipo .php e é comum que os Servidores HTTP sempre carreguem o arquivo index ao receberem uma requisição que aponte para uma pasta, como por exemplo:

GET / HTTP/1.1
Host: ganesh.icmc.usp.br

Apache irá carregar o arquivo /index.php ou /index.html se existirem...

3. Sintaxe, Variáveis e Operadores

O PHP se trata de uma linguagem não tipada e que também não exige que suas variáveis sejam previamente declaradas. Todas as variáveis devem iniciar com o símbolo $ e há poucas restrições para os caractéres que podem ser utilizados em suas nomeações. Veja os exemplos:

<?php
    $a = 1;
    $b = "5ej4 1m G4n3shEr!";
    $c = (2 * 2.5) + 3;
    $d = $a + $b + $c;

    echo $d;  // output: 14

Se você está estranhando o resultado 14 e não um erro por termos feito uma soma entre dois números e uma string, isso se deve à característica do PHP em tentar realizar a transformação automática da string para um número (que é bem sucedida pois a mesma inicia com o valor 5).

Logo, linguagens de tipo dinâmico são fáceis de serem utilizadas mas podem apresentar comportamento não previsíveis aos desatentos do seu funcionamento.

Outro detalhe importante é o uso obrigatório do ; ao fim de cada sentença mesmo que seja utilizado apenas um comando por linha.

Por fim, o PHP possui uma série de operadores lógicos e estruturas de controle como grande parte das linguagens, veja o exemplo a seguir:

<?php
    for($i = 0; $i < 10; $i++){
        if($i % 2 == 0){ 
            echo "par";
        } else {
            echo "impar";
        } 
    }

4. Acessando os dados da Requisição

Vamos relembrar o diagrama visto na aula de Servidores Web acerca do Apache HTTP Server:

http://ganesh.icmc.usp.br/buscar.php?frente=web

Podemos acessar o parâmetro enviado pela URL utilizando a seguinte variável:

<?php echo $_GET['frente']; ?>

Outras variáveis muito utilizadas também são: $_POST, $_COOKIE, $_SERVER, $_REQUEST e $_SESSION, tendo cada uma seu uso específico e que pode ser consultado na própria documentação.

5. De início quanto devo me aprofundar?

No âmbito de segurança web, compreender a linguagem utilizada é essencial para compreender a lógica implementada por trás de um sistema ou desafio. No geral, como a web utiliza o protocolo HTTP como meio de comunicação, uma vez que se compreenda o funcionamento de uma linguagem se torna um pouco mais simples a migração desses conceitos para novas linguagens.

Muitas das falhas que veremos nos websites não necessariamente estarão atreladas à uma linguagem em si mas sim às más decisões tomadas ao construir um determinada funcionalidade. Por outro lado, também haverá vulnerabilidades atreladas ao design de cada linguagem e possuir a capacidade de se adaptar dentre diferentes cenários é algo essencial (Exemplo: pesquise vulnerabilidades de PHP Type Juggling).

Logo, recomendamos que aproveite os desafios mais fáceis do Ping para se acostumar com a sintaxe do PHP e tentar compreender o que ocorre em cada código para então partir para outras linguagens.

Menção Honrosa: o Node.js é outra linguagem em ascenção e que já domina uma boa parcela das vagas de web atualmente, porém para evitar delongas deixamos seu estudo ao cargo do leitor.

Para saber mais detalhes das estruturas de controles, declaração de funções e criação de classes e objetos a é bastante simples de se compreender, além de existir bastante material disponível na internet para iniciantes.

Fonte:

Durante a etapa em que o servidor invoca o interpretador (etapa 4), as informações da requisição também são enviadas afim de ficarem disponíveis para o script .php e podem ser acessadas por meio de . Vamos imaginar portanto, uma requisição para a seguinte url:

documentação do PHP
variáveis globais pré-definidas
PHP
Django
Rails
Rust
Node.js
https://stillat.com/