🧠 Quiz Formativo: Cap 12 - Strings e Segurança OWASP/CERT C

Teste sua compreensão sobre o terminador nulo '\0', prevenção de Buffer Overflow, funções seguras de <string.h> e ataques de Format String.

Instruções:

  • Clique na alternativa que julgar correta para cada uma das questões abaixo.
  • O sistema avaliará sua resposta imediatamente fornecendo justificativa técnica detalhada.

Questão 1: Qual é a finalidade fundamental do caractere nulo `'\0'` (byte `0x00`) no final de uma string em C?


Questão 2: Quantos bytes de memória RAM devem ser alocados no mínimo para armazenar a string `"SISTEMAS"`?

<button class="quiz-option" data-correct="true" data-feedback="Correto! A palavra `\"SISTEMAS\"` contém 8 letras (`strlen == 8`). O array precisa de exatamente 9 bytes (8 caracteres visíveis + 1 byte para o `'\0'`) para conter o terminador nulo final."> B) 9 bytes (8 caracteres visíveis + 1 byte para o `'\0'`) </button> <button class="quiz-option" data-correct="false" data-feedback="Incorreto. 16 bytes seria o dobro do necessário; a string `\"SISTEMAS\"` requer apenas 9 bytes (8 caracteres + o terminador nulo), não havendo motivo para alocar o dobro do espaço mínimo."> C) 16 bytes </button> <button class="quiz-option" data-correct="false" data-feedback="Incorreto. 4 bytes corresponderia, por exemplo, ao tamanho de um único `int` de 32 bits; a string `\"SISTEMAS\"` tem 8 caracteres, exigindo bem mais espaço, especificamente 9 bytes com o terminador."> D) 4 bytes </button>

Questão 3: Por que a função `snprintf()` é considerada a opção mais segura para formatar textos em buffers em C?


Questão 4: O que acontece se um programa executar a instrução `char *ptr = "Texto"; ptr[0] = 'X';`?

<button class="quiz-option" data-correct="false" data-feedback="Incorreto. Literais de string atribuídos a um ponteiro (`char *ptr = \"Texto\";`) residem na seção de memória somente-leitura `.rodata`; tentar escrever nessa área não altera o conteúdo com sucesso, e sim provoca uma falha de segmentação."> A) A string se torna `"Xexto"` com sucesso. </button> <button class="quiz-option" data-correct="true" data-feedback="Correto! Ocorre um travamento fatal por falha de segmentação (*Segmentation Fault / Access Violation*), pois literais de string residem na seção de memória de somente leitura `.rodata`. A escrita nessa área é bloqueada pelo sistema operacional. Para criar uma string modificável, deve-se usar um vetor local: `char ptr[] = \"Texto\";`."> C) Ocorre um travamento fatal por falha de segmentação (*Segmentation Fault / Access Violation*), pois literais de string residem na seção de memória de somente leitura `.rodata`. </button>

Questão 5: Qual vulnerabilidade crítica de segurança ocorre quando um programa executa `printf(entradaDoUsuario);` sem usar o especificador `"%s"`?

<button class="quiz-option" data-correct="false" data-feedback="Incorreto. Injeção de SQL ocorre quando entradas não sanitizadas são concatenadas diretamente em consultas de banco de dados; `printf()` sem `\"%s\"` não interage com bancos de dados, e sim explora a interpretação de especificadores de formato pela própria função."> A) Injeção de SQL. </button> <button class="quiz-option" data-correct="true" data-feedback="Correto! Trata-se de um ataque de *Format String*, onde o usuário pode passar `%x`, `%s` ou `%n` para vazar dados confidenciais ou sobrescrever ponteiros na memória Stack. Se a string contiver caracteres de formatação, o `printf` buscará argumentos inexistentes na Stack, vazando endereços de memória, dados de autenticação e variáveis confidenciais. A forma segura obrigatória é `printf(\"%s\", entradaDoUsuario);`."> B) Ataque de *Format String* (onde o usuário pode passar `%x`, `%s` ou `%n` para vazar dados confidenciais ou sobrescrever ponteiros na memória Stack). </button> <button class="quiz-option" data-correct="false" data-feedback="Incorreto. Negação de Serviço por falta de disco envolveria esgotamento de espaço de armazenamento; `printf(entradaDoUsuario)` sem `\"%s\"` é uma vulnerabilidade de memória (Format String), sem relação direta com espaço em disco."> C) Ataque de Negação de Serviço por falta de disco. </button>