<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rui Trigo</title>
    <description>The latest articles on DEV Community by Rui Trigo (@ruitrigo_dev).</description>
    <link>https://dev.to/ruitrigo_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2438777%2F09582649-bb8c-49a8-8483-f14af65e5273.png</url>
      <title>DEV Community: Rui Trigo</title>
      <link>https://dev.to/ruitrigo_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruitrigo_dev"/>
    <language>en</language>
    <item>
      <title>Validação e Sanitização em Aplicações Web</title>
      <dc:creator>Rui Trigo</dc:creator>
      <pubDate>Tue, 26 Nov 2024 23:13:41 +0000</pubDate>
      <link>https://dev.to/ruitrigo_dev/validacao-e-sanitizacao-em-aplicacoes-web-740</link>
      <guid>https://dev.to/ruitrigo_dev/validacao-e-sanitizacao-em-aplicacoes-web-740</guid>
      <description>

&lt;h2&gt;
  
  
  O Que São e Por Que São Cruciais?
&lt;/h2&gt;

&lt;p&gt;A validação e sanitização são, sem sombra de dúvida, um dos pilares da segurança em aplicações web. Enquanto a validação verifica se os dados recebidos estão no formato esperado, a sanitização limpa e transforma esses dados para garantir que são seguros para processamento.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validação
&lt;/h3&gt;

&lt;p&gt;Por um lado, a validação é como um porteiro rigoroso que verifica se tens bilhete antes de entrar no espetáculo. Verifica o tipo, o formato e o conteúdo dos dados recebidos. Vejamos um exemplo de código vulnerável sem validação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'idade'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM utilizadores WHERE idade = &lt;/span&gt;&lt;span class="nv"&gt;$idade&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código é um convite aberto a ataques de injeção SQL, pois o input pode facilmente manipular o comportamento da query. Em vez disso, deverias fazer algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;filter_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'idade'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;FILTER_VALIDATE_INT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$idade&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nv"&gt;$idade&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Idade inválida"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Cria uma conexão&lt;/span&gt;
&lt;span class="nv"&gt;$conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;mysqli&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$servername&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$dbname&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Executa um Prepared Statement&lt;/span&gt;
&lt;span class="nv"&gt;$stmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"INSERT INTO utilizadores (idade) VALUES (?)"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$stmt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;bind_param&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$idade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;PHP Wiki | filter_var() — Filters a variable with a specified filter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Sanitização
&lt;/h3&gt;

&lt;p&gt;Por outro lado, a sanitização é como um filtro de água que remove impurezas. Transforma dados potencialmente perigosos em formatos seguros. Vejamos outro exemplo vulnerável:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'nome'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Olá, &lt;/span&gt;&lt;span class="nv"&gt;$nome&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código pode levar a um ataque XSS. Uma versão sanitizada seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'nome'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Olá, &lt;/span&gt;&lt;span class="nv"&gt;$nome&lt;/span&gt;&lt;span class="s2"&gt;!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O efeito esperado é a conversão dos caracteres "&amp;amp;, ', ", &amp;lt;, &amp;gt;" para o seu equivalente em HTML ENTITIES, ou seja, eles tornam-se meramente símbolos visuais sem efeito algum em termos de código interpretado pelo browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;PHP Wiki | htmlspecialchars() — Convert special characters to HTML entities&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Validação do Lado do Cliente
&lt;/h3&gt;

&lt;p&gt;É importante notar que, embora a validação do lado do cliente seja útil para melhorar a experiência do utilizador, nunca é suficiente para garantir a segurança. Afinal de contas, um atacante pode facilmente contornar essas verificações. Por isso, a validação do lado do servidor é imprescindível.&lt;/p&gt;

&lt;p&gt;Desta maneira, nem toda a sanitização é igual. Dependendo do contexto onde os dados serão utilizados, diferentes técnicas devem ser aplicadas. Por exemplo, dados que serão inseridos numa base de dados SQL requerem uma sanitização diferente daqueles que serão exibidos numa página HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  Não Reinventes a Roda
&lt;/h3&gt;

&lt;p&gt;Felizmente, não precisas de criar todas estas proteções do zero. Existem inúmeras bibliotecas e frameworks que oferecem funções robustas de validação e sanitização. Contudo, é crucial compreender como funcionam para as utilizar corretamente.&lt;/p&gt;

&lt;p&gt;Por fim, mas não menos importante, realizar "pentests" regularmente é fundamental. Estes testes simulam ataques reais e podem revelar falhas que passaram despercebidas. Lembra-te: é melhor descobrires as vulnerabilidades antes dos atacantes. Se tens iniciativa de o fazer, podes começar por listar a tua empresa numa plataforma Bug Bounty, onde hackers éticos reportam falhas na tua aplicação em troca de remuneração.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>webapp</category>
      <category>security</category>
      <category>portugues</category>
    </item>
    <item>
      <title>Fundamentos da Segurança em Aplicações Web</title>
      <dc:creator>Rui Trigo</dc:creator>
      <pubDate>Tue, 26 Nov 2024 22:37:53 +0000</pubDate>
      <link>https://dev.to/ruitrigo_dev/fundamentos-da-seguranca-em-aplicacoes-web-1783</link>
      <guid>https://dev.to/ruitrigo_dev/fundamentos-da-seguranca-em-aplicacoes-web-1783</guid>
      <description>

&lt;h2&gt;
  
  
  A Importância da Segurança Digital
&lt;/h2&gt;

&lt;p&gt;Nos dias que correm, a segurança em aplicações web é absolutamente crucial. Desta maneira, à medida que o mundo digital evolui, os riscos associados também aumentam. Portanto, é fundamental compreendermos os alicerces desta área.&lt;/p&gt;

&lt;h3&gt;
  
  
  Autenticação e Autorização
&lt;/h3&gt;

&lt;p&gt;A autenticação e a autorização são, sem dúvida, um dos pilares da segurança web. Por um lado, a autenticação garante que és quem dizes ser. Por outro, a autorização determina o que podes fazer no sistema. Juntas, formam uma barreira robusta contra acessos não autorizados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encriptação
&lt;/h3&gt;

&lt;p&gt;A encriptação é como um cofre digital para a tua informação. Transforma dados legíveis em código indecifráveis para olhos curiosos. Desta forma, mesmo que alguém intercepte a tua informação, não conseguirá lê-la sem a chave adequada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gestão de Sessões
&lt;/h3&gt;

&lt;p&gt;Imagina a gestão de sessões como um porteiro vigilante. Esta não só verifica quem entra, mas também quanto tempo pode ficar. Esta prática previne que sessões abandonadas se tornem portas abertas para intrusos na aplicação web.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validação de Input
&lt;/h3&gt;

&lt;p&gt;Na web, a regra de ouro é: nunca confies nos dados do utilizador. A validação de inputs é como um detector de mentiras para a tua aplicação. Verifica tudo o que entra, através de validação e sanitização, assegurando dados esperados e não conflituosos com o teu sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atualizações e Patches
&lt;/h3&gt;

&lt;p&gt;Tal como fazes manutenção à tua casa, as aplicações web precisam de cuidados regulares. As atualizações e patches são como reparações que tapam buracos de segurança antes que os "hackers" abusem deles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitorização e Logging
&lt;/h3&gt;

&lt;p&gt;Por fim, a monitorização e o logging são os teus olhos e ouvidos digitais. Registam tudo o que se passa na tua aplicação, permitindo-te detetar e reagir perante qualquer atividade suspeita.&lt;/p&gt;

</description>
      <category>webapp</category>
      <category>security</category>
      <category>braziliandevs</category>
      <category>portuguese</category>
    </item>
  </channel>
</rss>
