{"componentChunkName":"component---src-templates-blog-post-js","path":"/riscos-de-segurança-em-aplicações-web/","result":{"data":{"markdownRemark":{"fields":{"slug":"/riscos-de-segurança-em-aplicações-web/"},"frontmatter":{"title":"Riscos de Segurança em Aplicações Web","description":"Cross-Site Scripting (XSS)","date":"02 de agosto de 2020","image":"/assets/img/screen-shot-2020-08-02-at-19.51.53.png"},"html":"<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 863px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 80%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACf0lEQVQ4y41TW2sTQRjtv/O94L1obW1jUYxFihYtWPBBQS221Vq0Ylp60USp9sEfIIgoPooPScidtObW3c1ld27Hb2azcWMqOHDyzXyz38k538wMKQXA/PhBSUD+B7olFLuT7hgKEszzwHkVAjZ91CQ4BgBFOL21Aa0Za0EIOUDaI2w5bXyIZ/EqVsfOuoUtwvaGhdgLC5sxmody62sWvn+zqUr4ro4idBwXczPA6HFgYoRwFrhwEli4r3BlHBg7DVyk3CTtjQwDb18zquJd+6qntI/w7hzH1CgQjShMnQdmpwVcV2DjJcfYKWXy0UmFcSJPbHuGkHOfyEefwg4RCkN4LQJEzkl8/aJVKFiHAjeiApfHgKsTmhT4/EkT+vt/LBuF/tSxO7g9IzF6gqydAREL7Gx41C+O3TjDreuMVPp2ny0qvE8oaofEbkJCcBm27BM26VDiWx5WlzjWVhieP2VYfsTwZIFh6SHD6jKjPMfKY4aPe5z+QLtQmJ8l42HCYOJ5gYUwuDlJH7yb83DYYEQs8fMHJ7USbucfhK7LDDxPRw+1WsOgWq3DthzKc7p/Huo1hnvzWp3E4gNJeTl4ykEiWDcaDSSTSaTTaaRSKeRyOSLjZs+2BaYvAcPHgDs3FeWPUBgmbrVaKBaLKBQKJmrk83kcHPyieyfQbgu82VRkl2PvnSRC0a8wfDEl3dROp0NFbbLtmnkQdU63RtuW9Dyl0q+lTYfCBhXqoYu0kkqlYlAqlah/VQPdgv39fVJ5gHK5TC0oIJ8rmpcS5ugjDBRqFdpmJpMxyGazJuoWaOi1HkKIvtqewr/7qGOz2TRwHMdEy7LoMGwz1z0Oj3Ddb9HamL4tb6oOAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Imagem de um monitor e um celular ao lado direito, ambos mostrando uma tela roxa com um sinal de alerta de triangulo com uma exclamação no meio.\"\n        title=\"Imagem de um monitor e um celular ao lado direito, ambos mostrando uma tela roxa com um sinal de alerta de triangulo com uma exclamação no meio.\"\n        data-src=\"/static/d4810eeeec1f42c08c724fa49739f5a0/ee455/screen-shot-2020-08-02-at-19.51.53.png\"\n        data-srcset=\"/static/d4810eeeec1f42c08c724fa49739f5a0/8ff5a/screen-shot-2020-08-02-at-19.51.53.png 240w,\n/static/d4810eeeec1f42c08c724fa49739f5a0/e85cb/screen-shot-2020-08-02-at-19.51.53.png 480w,\n/static/d4810eeeec1f42c08c724fa49739f5a0/ee455/screen-shot-2020-08-02-at-19.51.53.png 863w\"\n        sizes=\"(max-width: 863px) 100vw, 863px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2>Cross Site Scripting - XSS</h2>\n<ul>\n<li><a href=\"#o-que-e\">O que é</a></li>\n<li><a href=\"#3-tipos-xss\">3 Tipos de XSS</a></li>\n<li><a href=\"#como-prevenir\">Como prevenir</a></li>\n<li><a href=\"#referencias\">Referências</a></li>\n</ul>\n<h2 id=\"o-que-e\">O que é:</h2>\n<p>Vulnerabilidade que permite a inserção e execução de códigos Javascript maliciosos no lado do cliente (no navegador de um usuário).</p>\n<p>A não validação de dados inseridos pode permitir que scripts maliciosos sejam passados e executados. Com isso pode:</p>\n<ul>\n<li>Modificar o HTML para roubar dados de usuário;</li>\n<li>Roubar sessões de usuário, que no caso a pessoa que estiver atacando pode ir direto para a sessão de um usuário sem precisar de login e senha;</li>\n</ul>\n<p>Um exemplo que vi muito foi de sites com campos de texto, tipo fórum. Onde:</p>\n<ul>\n<li>Alguma vítima acessa o link de um site conhecido de forma \"alternativa\";</li>\n<li>A vítima chegou no site através de um link que recebeu por email ou em algum outro site;</li>\n<li>Esse link contém código malicioso previamente manipulado pela pessoa que está atacando;</li>\n<li>A vítima vai enviar, por exemplo, um comentário no fórum que contém junto um script malicioso escondido;</li>\n<li>Quando aquele comentário for renderizado pela página o código malicioso vai ser interpretado como um script e vai ser executado.</li>\n</ul>\n<p>Também é possível que a partir de uma única vítima, afetar diversas outras pessoas. Quando o script malicioso for armazenado (de forma não tratada) e posteriormente exibido para outras pessoas, o código malicioso vai está lá e vai ser executado.</p>\n<h2 id=\"3-tipos-xss\">3 Tipos de XSS:</h2>\n<ul>\n<li>\n<p><strong>Reflected XSS</strong></p>\n<ul>\n<li>Quando a vítima entra num site que ela já conhece só que através de um link alternativo que possui código malicioso sem que ela perceba, que vai ser executado quando ela abrir a página, por exemplo.</li>\n</ul>\n</li>\n<li>\n<p><strong>Stored XSS</strong></p>\n<ul>\n<li>Scripts maliciosos são injetados junto a algum campo onde a vítima vai enviar dados para o servidor, e o servidor salva esses dados. Basicamente é quando a aplicação armazena dados do usuário de forma não tratada e que pode conter scripts maliciosos que no momento em que o dado for mostrado de volta para usuários aquele script será executado.</li>\n</ul>\n</li>\n<li>\n<p><strong>DOM XSS</strong></p>\n<ul>\n<li>O código é executado sem precisar passar pelo servidor;</li>\n<li>O código executado pode modificar o HTML da página, através da alteração do DOM por substituição/alteração de nós;</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"como-prevenir\">Como prevenir:</h2>\n<ul>\n<li>Validações de dados tanto no lado do frontend quanto no backend - previne o Reflected e Stored XSS;</li>\n<li>Codificação de caracteres quando há modificação da página no lado do cliente - previne o DOM XSS.</li>\n<li>Uso de frameworks e bibliotecas que forneçam proteção a XSS.</li>\n</ul>\n<p>A biblioteca React, por exemplo:</p>\n<blockquote>\n<p>\"Por padrão, o React DOM escapa quaisquer valores incorporados no JSX antes de renderizá-los. Assim, assegura que você nunca injete algo que não esteja explicitamente escrito na sua aplicação. Tudo é convertido para string antes de ser renderizado. Isso ajuda a prevenir ataques XSS (cross-site-scripting).\"</p>\n</blockquote>\n<p>Fonte: <a href=\"https://pt-br.reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks\"></a><a href=\"https://pt-br.reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks\">https://pt-br.reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks</a></p>\n<p>~🌟~</p>\n<p>Bem.. é isso. 😉</p>\n<p>Se tiver algo que você tenha encontrado de errado, pode entrar em contato comigo.</p>\n<p>Esse conteúdo foi o meu entendimento após estudar sobre o assunto. </p>\n<p>Essa semana rolaram algumas conversas sobre se seria seguro ou não armazenar token JWT no <code class=\"language-text\">localstorage</code>, e me deparei com esse link:</p>\n<p><a href=\"https://dev.to/cotter/localstorage-vs-cookies-all-you-need-to-know-about-storing-jwt-tokens-securely-in-the-front-end-15id\">LocalStorage vs Cookies: All You Need To Know About Storing JWT Tokens Securely in The Front-End</a></p>\n<p>Que conclui que não é seguro armazenar JWT no localstorage por ser vulnerável a ataques XSS.</p>\n<p>Achei interessante, mas tenho muito pouco conhecimento sobre ataques a sites, basicamente sabia apenas que deveria tratar os dados que vem de formulários, que poderiam ser sucetíveis a injeção de SQL, sabia que dava pra executar scripts e etc...</p>\n<p>Coisas que vamos ouvindo na vida mas não vamos muito a fundo pra entender.</p>\n<p>Os nomes específicos dessas vulnerabilidades e desses ataques eu não sabia (já vi algumas siglas mas nunca sabia exatamente qual era o que).</p>\n<p>A princípio escolhi o XSS para entender melhor.</p>\n<p>E acho que foi sucesso pra entender, e cansativo 😅.</p>\n<p>Queria ter colocado tipo umas 3 num post só, mas só essa vulnerabilidade, da forma que eu entendi, deu um post... Então tá de boa.</p>\n<p>Depois trago outras em próximos posts.</p>\n<p>Até a próxima. 🤙🏽</p>\n<h2 id=\"referencias\">Referências:</h2>\n<p><a href=\"https://wiki.owasp.org/images/0/06/OWASP_Top_10-2017-pt_pt.pdf\"></a><a href=\"https://wiki.owasp.org/images/0/06/OWASP_Top_10-2017-pt_pt.pdf\">https://wiki.owasp.org/images/0/06/OWASP_Top_10-2017-pt_pt.pdf</a></p>\n<p><a href=\"https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html\"></a><a href=\"https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html\">https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html</a></p>\n<p><a href=\"https://www.youtube.com/watch?v=_Z9RQSnf8-g&#x26;feature=emb_logo\"></a><a href=\"https://www.youtube.com/watch?v=_Z9RQSnf8-g&#x26;feature=emb_logo\">https://www.youtube.com/watch?v=<em>Z9RQSnf8-g&#x26;feature=emb</em>logo</a></p>\n<p><a href=\"https://dev.to/cotter/localstorage-vs-cookies-all-you-need-to-know-about-storing-jwt-tokens-securely-in-the-front-end-15id\">https://dev.to/cotter/localstorage-vs-cookies-all-you-need-to-know-about-storing-jwt-tokens-securely-in-the-front-end-15id</a></p>","timeToRead":4}},"pageContext":{"slug":"/riscos-de-segurança-em-aplicações-web/","previousPost":{"fields":{"slug":"/css-grid-layout-parte-1/"},"frontmatter":{"title":"CSS Grid Layout - parte 1"}},"nextPost":{"fields":{"slug":"/iniciando-com-git-e-github/"},"frontmatter":{"title":"Iniciando com Git e Github"}}}},"staticQueryHashes":["1595325003","2037742868","764694655"]}