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 de tag

Date Range Picker: Como configurar o formato, o idioma e adicionar no input do Scriptcase

Para que serve o date range picker ?

O Date Range Picker foi criado inicialmente para atender os relatórios do Improvely. O seletor de período pode ser adicionar em qualquer elemento da página web (preferencialmente inputs), para exibir dois calendários que permitem a seleção de datas, horários ou intervalos pré-definidos, como por exemplo: últimos 30 dias, última semana, próximo mês, ano atual, etc.

Aplicando o date range picker

Neste exemplo utilizaremos o Scriptcase para testar esta funcionalidade, porém você pode utilizar este código direto no seu HTML.
Utilizaremos também “links virtuais” para importar os arquivos das bibliotecas Bootstrap e Date Range Picker já que é apenas uma demonstração de uso.  Aconselho vocês a baixarem os arquivos para não correr o risco de perdê-los caso saiam do ar ou o servidor CDN esteja fora.

Links necessários

Você deve adicionar estes links na sua página HTML, caso esteja utilizando o Scriptcase, siga o exemplo abaixo e cole o código no evento onScriptInit.

?>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<?php

Adicionando a função no input

Antes de adicionar a função no seu input, você precisa identificar o “name” dele.
Para isso clique com o botão direito do mouse em cima do elemento desejado; Selecione a opção Inspecionar elemento; Observe que o código HTML do objeto será marcado na janela que irá abrir; Basta você identificar o name deste elemento e adicionar a função daterangepicker() há ele.

Inspecionar elemento ou Inspecionar

Identificar o name no elemento

Adicione ao input a função

<script>
$(document).ready(function(){
$('input[name="periodo"]').daterangepicker();
});
</script>

Esta função precisa estar logo abaixo dos links, antes de abrir o PHP (<?php) novamente.

Ao executar a tela, você já poderá observar o calendário funcionando, porém ainda em inglês e com o formato mm/dd/aaaa. Para alterar o formato e o idioma, adicione dentro dos parenteses da função a seguinte informação:

{
"locale": {
"format": "DD/MM/YYYY",
"separator": " - ",
"applyLabel": "Aplicar",
"cancelLabel": "Cancelar",
"daysOfWeek": [
"Dom",
"Seg",
"Ter",
"Qua",
"Qui",
"Sex",
"Sab"
],
"monthNames": [
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"firstDay": 1
}
}

Agora sim! O seu input date range picker já esta funcionando e ainda com formato e idiomas corretos.
Se você leu o conteúdo e não conseguiu entender, assista o vídeo abaixo.

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

Fonts: www.daterangepicker.com/, www.gocache.com.br/cdn
Share on facebook
Share on email
Share on whatsapp
Share on twitter

Composer: Como utilizar dentro do Scriptcase ?

De acordo com o site oficial do Composer

Composer é uma ferramenta para gerenciamento de dependências em PHP. Ele permite que você declare as bibliotecas dependentes que seu projeto precisa e as instala para você.

Deixa eu explicar

Para quem não sabe, o Composer é uma ferramenta que foi criada para gerenciar as dependências do PHP que são cada vez mais indispensáveis hoje em dia. Com pouquissímas linhas de código você define quais bibliotecas de terceiros ou suas mesmo você irá utilizar. O Composer simplesmente baixa pra vocês as bibliotecas e você simplesmente as usa.

Neste exemplo quero ensinar vocês a baixar o composer localmente e depois adicionar os arquivos na biblioteca externa do Scriptcase para utilizar nos seus projetos.

Como instalar o composer

A primeira coisa que você precisa fazer, é criar uma pasta de fácil acesso e de preferência com um nome fácil para que você consiga identificar no terminal.

Após isso, abra o terminal do seu sistema operacional.

Feito isso, você vai precisar acessar a pasta que criou. No exemplo, a pasta está dentro de Mesa > pdfparser. Sendo assim utilizei o seguinte comando:

cd Desktop/pdfparser

Agora sim vamos começar a instalar o Composer. Você vai precisar executar os comandos abaixo, um por vez.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Agora se você olhar dentro da pasta, terá um arquivo chamado composer.phar. Se este arquivo estiver lá, fique tranquilo, esta dando certo.

O próximo passo é você criar um arquivo chamado composer.json dentro desta pasta. Este arquivo irá conter a requisição das dependências que deseja utilizar. E essa requisição é você quem adiciona. A estrutura do arquivo é esta:

Dentro do “require”: {} você vai adicionar a linha da biblioteca que deseja utilizar, neste caso será:

"smalot/pdfparser": "*"

Caso queira utilizar outra, coloque uma virgula e a linha da outra biblioteca abaixo.

Agora você vai executar o comando abaixo no terminal.

Dentro da pasta criada termos a seguinte estrutura de acordo com o código mostrado aqui. O arquivo composer.phar pode deletar sem medo. Conferindo e estando tudo certinho, vamos para o Scriptcase.

Colocando o conteúdo dentro do Scriptcase

Aqui é bem simples. Primeiro você precisa zipar a pasta com todos os arquivos baixados.

Depois você vai no projeto e abre a biblioteca externa, cria uma nova ou adiciona os arquivos numa já existente. Se você não sabe utilizar biblioteca externa, acessa aqui. Suba o arquivo para dentro da biblioteca criada e habilite o uso da mesma para o seu projeto.

Agora você vai até a aplicação que deseja utilizar as dependências baixadas pelo composer e coloca lá o código de importação do arquivo autoload.php. Em seguida comece a utilizar a biblioteca normalmente. Observem que tenho ali um código da biblioteca PDFParser que abre um arquivo PDF e extrai o conteúdo dele em forma de texto.

E pronto, já vai funcionar. Fácil, rápido, seguro e muito útil.
Se você não conseguiu entender ou não deu certo, assista o vídeo abaixo, talvez você entenda melhor.

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

Fonts:  https://getcomposer.org/
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