O que é Cross-site Scripting “XSS” e como posso proteger o meu site / aplicação contra esse tipo de ataque?
Basicamente o Cross-site Scripting explora uma “simples” vulnerabilidade causada pela falta de um filtro nos inputs dos usuários.
Os dados armazenados no banco de dados não são devidamente filtrados, dessa forma é permitido que o usuário salve um código Javascript invés de uma String, que é o valor esperado.
Digite um código JS no campo abaixo: Ex “ alert(10001); “.
…
Vardump da variável “test”:
Nada foi encontrado na variável POST:…
No exemplo acima, além do var_dump da variável, estou utilizando o echo para exibir o conteúdo na página.
E é exatamente ai que ocorre a falha de segurança, permitindo que um script seja incluso na minha página sem nenhum filtro.
Imagine agora que o valor enviado acima fosse salvo no banco, como um “comentário” de um usuário.
Facilmente o agressor poderia criar um redirecionamento da página contendo a listagem de comentários para o seu site utilizando:
<script>location.href='http://rogertakemiya.com.br';</script>
Aonde o código acima é enviado no INPUT que é destinado ao comentário real.
Em cada linguagem de programação existirá funções nativas que irão fornecer um filtro para remover HTML e Javascript.
É muito importante que você filtre qualquer tipo de dado fornecido pelos usuários do seu sistema, tanto no momento que você for salvar no banco de dados, como também quando você for exibi-los.
XSS pode causar um grande transtorno para você e danificar permanentemente a reputação do seu site ou sistema.
Você pode utilizar a função htmlspecialchars nos valores antes de salvar no banco de dados e quando for exibi-los
htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
Microsoft tem um artigo dedicado a como filtrar sua aplicação contra XSS.
https://docs.microsoft.com/en-us/aspnet/core/security/cross-site-scripting
from jinja2 import utils str(utils.escape('texto a ser validado'))
/* exemplos em JSP */<p><c:out value="${bean.userControlledValue}"></p> <p><input name="test" value="${fn:escapeXml(param.paramtest)}"></p>
Independente da linguagem que for utilizada é interessante você utilizar uma função “global” por onde passa todos os valores que são enviados e salvos pelos os usuários.
Dentro dessa função, você aplica os filtros que forem necessários utilizando as funções nativas ou bibliotecas.
Dessa forma, sempre que você precisar adicionar um novo filtro ou atualizar uma função que ficou “outdated” você não precisará revisar todo o seu código fonte.
Bom desenvolvimento! 😉
Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…
Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…
Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…
Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…
Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…
Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…