Sou de Porto Alegre

Rio Grande do Sul, Brasil

Me envie um e-mail

contato@camilamoreira.com.br

Estou disponível de

Seg. à Sex. das 9hs às 17hs

Título

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

Arquivo do autor:%s Camila Moreira

Snippets: O que são ? Como e quando utilizar ?

Poucos sabem, mas o Sublime Text é um excelente editor de códigos. Inclusive, até o momento é o meu preferido.
Ele possui diversas formas de facilitar o nosso desenvolvimento no dia-a-dia e uma delas são os snippets.

O que são snipptes ?

São pequenos trechos de códigos que podem ser reaproveitados durante o desenvolvimento de um projeto ou no seu dia-a-dia. Hoje vamos colocar como exemplo trechos de códigos que você digita constantemente.

A função switch é sem sombra de dúvidas muito utilizada. Agora me diga, você gosta de ficar digitando ela toda vez que precisa usar ? Ninguém gosta. Para isso existem os snippets. Deixa eu mostrar pra vocês como funciona a criação de um snippet.

Como criar um snippet ?

No momento desta postagem, estou utilizando o Sublime Text 3.2.1 (Build 3207). O local de criação dos snippets podem variar de acordo com a versão. Vá até Tools > Developer > New Snippet ou na versão português Configurações > Desenvolvedor > Novo Snippet.

Ao clicar em New Snippet, irá abrir um arquivo com o seguinte conteúdo.

Para criar esse snippet, você vai apagar o que estiver dentro das tags e adicionar o código desejado. Como dei o exemplo da função switch, utilizei ela aqui também para vermos como ficaria.

Depois que você adicionar o código dentro do snippet, basta você salvar. Para isso vá em File > Save As ou em português Arquivo > Salvar Como, de um nome para o seu snippet.

Como usar o snippet criado ?

Para fazer a chamada dos snippets criados, basta você digitar o nome dele e pressionar a tecla TAB. O seu código já virá preenchido e só utilizar a vontade.

Então é isso pessoal, espero que vocês tenham gostado do post.

Fonts: www.imasters.com.br, www.sublimetextdicas.com.br
Share on facebook
Share on email
Share on whatsapp
Share on twitter

SQL Injection: Como se defender ?

SQL Injection é o nome dado a manipulação de dados SQL através de objetos input. Mas como se defender  dele dentro e fora do Scriptcase? Veja agora!

Primeiramente se você ainda não leu o post sobre ‘SQL Injection: O que é e como funciona?’, aconselhamos que você dê uma olhada, pois para o entendimento deste post será necessário ter uma noção do que é o SQL Injection.

Defenda-se do SQL Injection dentro do Scriptcase

Poucas pessoas conhecem, mas o scriptcase possui uma lista de macros que permitem ao usuário manipular eventos, botões das aplicações, controle de segurança, efetuar operações com datas, etc… Entre todas estas macros poderemos encontrar a macro “sc_sql_injection”.
Ela é responsável por cuidar da segurança de nossos inputs contra o famoso sql injection.
Vamos agora entender como ela funciona.

Abaixo podemos observar como o select se comporta com relação aos dados inseridos no input, isto utilizando este select:

sc_select(rs, “SELECT * FROM sec_users WHERE login = “.sc_sql_injection({user}).” AND pswd = “.sc_sql_injection({pass}));

Sem a utilização da macro “sc_sql_injection” nosso código fica aberto a interpretações.

Agora com a utilização da macro de forma correta, o Scriptcase percebe rapidamente que esta sendo injetado um valor anormal e coloca uma barra invertida antes do valor do input login, desta forma a validação do select ficaria:

SQL gerado:

SELECT * FROM sec_users WHERE login = ‘\’ OR 1=1; — ‘ AND pswd = ”

Interpretação:

Me traga tudo da tabela sec_users onde o login é igual a \ ou 1 é igual a 1 e o restante comenta.

Logicamente não teremos nenhum login chamado “\”, portanto o injection da pessoa estará bloqueado. Por isso é sempre importante a utilização desta macro para buscar ou inserir informações no banco de dados.

Defenda-se do SQL Injection no PHP

Para que se esteja livre da utilização do SQL Injection, certas providências devem ser tomadas. Algumas das ações serão realizadas no servidor do banco de dados e outras devem ser garantidas pelo código fonte, ou seja, no nosso caso o PHP.

Podemos utilizar através do PHP a função addslashes(), que por sinal é a mesma função utilizada pela macro “sc_sql_injection”.

Esta função tem por objetivo inserir uma barra invertida antes de cada aspa simples e dupla encontrada na variável passada, este processo é conhecido como “escape”. Se a diretiva de configuração do PHP “magic_quotes_gpc” estiver ativada, o escape é realizado automaticamente sobre os dados de COOKIES e dados recebidos através dos métodos GET e POST.

Neste caso, não deve ser efetuado o tratamento com addslashes(). A função get_magic_quotes_gpc(), disponível nas versões do PHP a partir da 3.0.6, retorna a configuração atual da diretiva magic_quotes_gpc.

Veja o exemplo de como usar esta função:

Outra forma de se proteger também é através do MYSQLI no PHP. Se você ainda utiliza as funções da lib mysql(), “CORRA”, porque além de quase não ser mais utilizada, ela é totalmente vulnerável a invasões desse tipo. Nela, todas as queries são passadas manualmente. Mas é claro que eu não falaria para correr desta lib sem citar uma alternativa, a classe mysqli, esta usa parâmetros em “bind” para não haver nenhuma concatenação direta e nesse meio do “bind” a classe trata o input para nada funcionar como uma injeção.

Veja um pequeno exemplo de como utilizar:

Calma, eu sei que parece complicado, mas eu vou explicar linha a linha e garanto que você vai entender e passar a tomar mais cuidado na hora da criação do seu código. 

Lembrando que esses métodos que estou ensinando, são testados e aprovados, então vale a pena cuidar a forma que você desenvolve. Essa é uma dica valiosa e eu não deixaria de tentar seguir esta linha de raciocio  para pelo menos ter a conciência limpa de que você fez o seu melhor.

Bom, deixa  eu te explicar o código:

# Aqui instanciamos a classe mysqli, passando como parâmetro o servidor, usuário, senha e nome do banco de dados.
$mysqli = new mysqli(‘servidor’, ‘usuario’, ‘senha’, ‘database’ );

# Com a nossa classe já instanciada, vamos fazer a chamada do método prepare para “preparar” a query que receberá os valores.
# Onde tiver “?”(interrogação) serão os locais onde entraram os valores.
# Obs.: Não é necessário se preocupar com aspas no caso de strings.
$stmt = $mysqli->prepare(“SELECT name, email FROM sec_users WHERE login=? AND pswd=?”);

# Depois do nosso statement estar preparado com a string da query e as interrogações, nós iremos definir quais variáveis entraram
# em quais lugares e seus tipos através da função ->bind_param(“string de tipos”, “variáveis em ordem”).
$stmt->bind_param(‘ss’, $login, $senha);
# Onde tem ‘ss’ você deverá colocar as iniciais do tipo da variável.
# Ex.: $login e $senha são strings, então ‘ss’. Se fosse $valor e $senha, então ‘ds’.

# Os tipos permitidos são:
# i – variáveis inteiras
# d – variáveis double
# s – variáveis string
# b – variáveis que fornecem dados para um blob

# Após definirmos quais lugares as variáveis ocuparam, executaremos o statement.
if($stmt->execute()) {

# Outra função legal do statement é que podemos fazer algo parecido com o processo inverso do bind_param.
$stmt->bind_result($name, $email);

# A função bind_result, irá atribuir os valores obtidos nas queries, no nosso caso name e email, em variáveis que nós
# escolhemos os nomes, eu preferi manter o nome, mas poderia ter colocado $var1 e $var2, sendo que $var1 receberia o nome
# e $var2 o email.

# E agora pegamos todos os resultados imprimindo-os na tela com os nomes das variáveis que definimos no bind_result().
while($stmt->fetch()){
echo “Nome do usuário: $name \n Email do usuário: $email\n”;
}
}

Obviamente nunca estaremos 100% protegidos, pois se as maiores empresas como Facebook, Google e muitas outras que investem milhões em segurança de dados e são realmente eficientes no que diz respeito ao assunto, não conseguem se livrar dos ataques de hackers, imaginem nós programadores comuns. Entretanto, sempre podemos dificultar as coisas.

Para entender melhor, assista o vídeo abaixo.

Então é isso pessoal, espero que tenham gostado do post. Aconselho que para melhor entendimento deem uma lida na documentação das funções e alternativas citadas acima.

Fonts: www.imasters.com.br, www.devmedia.com.br, www.php.net, www.scriptcaseblog.com.br
Share on facebook
Share on email
Share on whatsapp
Share on twitter

SQL Injection: O que é e como funciona ?

Neste post irei mostrar como injetar dados a partir de inputs, como aconteceu num ataque ao Google em 2017, consequentemente vou mostrar como se proteger desses tipos de ataques.

No dia 03 de janeiro de 2017 a maior ferramenta de buscas da internet, a Google, sofreu um ataque DNS (feito com SQL Injection). De acordo com as imagens obtidas pelos usuários da internet o autor do ataque se identifica como Kuroi’SH e a invasão aconteceu apenas “por diversão”.

De acordo com o hacker, a ação foi realizada por meio de um SQL Injection, injeção de SQL. Foi desta forma que Kuroi’SH redirecionou os acessos e realizou o deface, cunho popular inglês para identificar uma modificação na aparência de algum objeto ou site.

O que é SQL Injection ?

O SQL Injection é uma falha na codificação de uma aplicação qualquer (web ou local) que possibilita por meio de um input qualquer, a manipulação de uma consulta SQL. Esta manipulação é chamada de injeção, por isso o termo Injeção SQL. Resumindo: É uma técnica de ataque baseada na manipulação do código SQL, que é a linguagem utilizada para troca de informações entre aplicações e bancos de dados relacionais.

É a linguagem de padrão universal para manipulação de dados em bancos de dados relacionais através dos SGBDs (Sistema de Gerenciamento de Banco de Dados Relacionais). É um tipo de ataque onde o “Hacker” consegue inserir comandos maliciosos (sql querys) no banco de dados através dos campos de formulários ou de URLs de uma aplicação vulnerável, ambicionando extrair informações guardadas no banco de dados.

“Pense em SQL Injection como uma simples falha lógica, é simplesmente uma falha que, por deixar aberta a interpretações, ocorrem manipulações indesejáveis.”

A Inurl Brasil, um grupo de pesquisa de segurança, desenvolvimento de ferramentas e ativismo digital, disse: “A computação é perfeita, mas quem programa os dispositivos e aplicações são estúpidos, eles não veem todas as possibilidades, eles não se importam com nada além do ‘caminho que determinei’, se esquecem que existem sempre muitos outros caminhos e que é função do desenvolvedor e do testador de software (algo que não existe muito nas empresas) fazer todos esses caminhos e garantir que o software se comporte adequadamente; caso não faça isso, um hacker fará”.

Narrando como é feita uma injeção SQL.

Imagine que você está viajando e seu carro perde a capacidade da bateria, ou seja, ela morre. O que fazer? Se você possui um carregador no carro poderá tentar algo para se salvar. Mas se não tiver, existem outros métodos para fazer com que a bateria funcione, por exemplo, a famosa “chupeta”, que é quando você conecta a sua bateria em outra que esteja em funcionamento.

Digamos que você não possui esse carregador, então precisa encontrar outro motorista que forneça a bateria. Você o encontra e faz a seguinte pergunta: “Amigo, eu preciso de uma recarga, será que daria?”. O outro motorista não vai entender o que você quer, correto?

Isso porque você não detalhou que precisa de uma recarga na bateria do seu carro. Você não foi explícito e o mesmo acontece na questão do SQL: são várias interpretações. Quando uma consulta normal com entrada de filtro é feita com vulnerabilidade, um hacker pode injetar um código malicioso na sua consulta e manipulá-la, já que você a deixou aberta a várias interpretações.

Por exemplo, voltando ao motorista que você pediu a recarga, seria como se ele te emprestasse um carregador de smartphone ou um carregador com a capacidade para danificar o seu carro.

Como é feita uma injeção(tecnicamente falando) ?

Basicamente, injeção é a pessoa inserir comandos indevidos de forma remota num servidor através de uma aplicação vulnerável.

Agora vou demonstrar um exemplo de injeção SQL de forma mais “técnica”. Então se você não tem conhecimento em programação, irá notar uma certa dificuldade, mas acredito que não seja o caso neste blog.

Veja uma aplicação de consulta SQl sem filtro de entrada:

$sql = “SELECT * FROM tabelaCM WHERE campoCM = ‘$_POST[“valor”]’ “;

No exemplo acima temos uma consulta que está completamente vulnerável. Como pode-se perceber existe apenas uma concatenação de uma variável POST recebida de fora, seja pelo INPUT de algum usuário ou até mesmo pela submissão de um formulário. A consulta demonstrada acima funciona da seguinte maneira:

“SELECIONE TUDO DA TABELA ONDE A COLUNA SEJA IGUAL AO VALOR RECEBIDO”

No PHP temos o uso do $_POST, que é uma variável global indicando a requisição pelo método HTTP POST, muito utilizado em submissão de formulário na web onde existe a passagem de variáveis na submissão, no nosso caso chamada de “valor”. Supondo que o valor do POST seja “Scriptcase”, a consulta seria:

“SELECT * FROM tabelaCM WHERE campoCM = ‘Scriptcase'”

O resultado seria uma consulta no BD(Banco de Dados) que traria da tabela “tabelaCM” onde a coluna “campoCM” seja igual a “Scriptcase” e retornaria todos os valores correspondentes a cláusula ‘where’. Porém, um hacker explora a falha injetando valores não tão normais. Pensando num cenário que tenha um hacker, vamos supor que o valor passado pelo POST seja:

“; SELECT * FROM information_schema.tables WHERE table_name != ””

No final a consulta seria:

“SELECT * FROM tabelaCM WHERE campoCM = ”; SELECT * FROM information_schema.tables WHERE table_name != ””

Neste exemplo, pudemos mudar a consulta para que ela retornasse também o nome de todas as tabelas existentes no banco de dados MYSQL(considerado o mais popular).

Assim funciona uma injeção SQL manual, “na prática, são utilizadas ferramentas que automatizam e traduzem todas as consultas para cada banco de dados até chegar no objetivo, bastando que exista a vulnerabilidade injetável”.

Agora eu te pergunto: Essa é uma técnica de hacking que exige muito conhecimento?Não. Uma pessoa com um conhecimento básico em banco de dados e na linguagem SQL consegue executar esse tipo de ataque.

Para entender melhor, assista o vídeo abaixo.

Então é isso pessoal, espero que vocês tenham gostado do post, no próximo irei mostrar como se defender do SQL Injection dentro e fora do Scriptcase.

Fonts: www.tecmundo.com.br, www.w3schools.com, www.devmedia.com.br, www.scriptcaseblog.com.br.
Share on facebook
Share on email
Share on whatsapp
Share on twitter