quarta-feira, 19 de março de 2014

É seguro comprar pela internet?

Será que é seguro mesmo?

De forma geral, comprar na internet é seguro sim.

Se levarmos em consideração que enfrentar filas em caixas, ser assaltado no caminho da loja, bater o carro ou ser atropelado são riscos que corremos quando vamos comprar em uma loja física, então é possível acreditar que comprar do conforto do seu sofá é mais seguro.

E se crackers(hackers do mal) roubarem meus dados bancários?

Na verdade isso só irá acontecer se você for negligente com a segurança dos seus equipamentos e dos seus dados. Porém se tomar algumas medidas e precauções mínimas, a chance de isso acontecer cai para quase zero.

Quais são essas medidas e precauções?

Quanto aos equipamentos (computadores, tablets, smartphones, etc...):


Fiz um post em especifico, referente a dicas para manter seu computador/sistema em SEGURANÇA. Leia, entenda e pratique isso.

Quanto aos seus dados (números de cartão de crédito, senhas, endereço, CPF, etc...):

  1. Sempre procure saber de quem é aquele site/loja, principalmente buscando o CNPJ e razão social da loja;
  2. Verifique se existe um endereço comercial físico, isso ajuda a buscar referencias de quem já comprou no estabelecimento e consequentemente a empresa tem mais credibilidade na praça. Porém, existem algumas lojas que são somente virtuais e isso não quer dizer que não sejam idonias.
  3. Procure referencias sobre outras pessoas que já compraram.
  4. Antes de colocar informações de cartão de crédito, verifique se o site oferece conexão criptografada com o protocolo https; 
  5. Na hora de pagar, verifique se você está em um ambiente de algum gateway de pagamento como PagSeguro, PagamentoDigital, Paypal, etc. Eles normalmente ajudam a garantir a integridade da negociação entre loja e comprador.
Tendo essas regras em mente e praticando-as, certamente vai diminuir bastante os riscos ao comprar pela internet.

Estou aberto a opiniões, críticas e sugestões nos comentários.

quarta-feira, 12 de março de 2014

AJAX Cross Domain com jQuery: AJAX em outro domínio

Para que isso serve?

Serve para buscar informações em outro dominio/site através de requisições AJAX.



Qual a diferença desse para o AJAX normal?

A explicação mais simples possível é: "AJAX normal" com JSON não permite (principalmente por questões de segurança) enviar solicitações para outros sites que não estejam no mesmo domínio. Portanto é necessário usar o AJAX Cross Domain com JSONP, o qual nos permite fazer a requisição para outro domínio. Dã!

Vamos ao que interessa!

Um exemplo de implementação para se comunicar com a API do Flickr:

  jQuery.ajax({
    url: 'http://www.flickr.com/services/feeds/photos_public.gne?format=json',
    dataType: 'jsonp',
    crossDomain: true,
    jsonp: false,
    jsonpCallback: 'jsonFlickrFeed',
    success: function(d) {
      $('#title').text(d.title);
 
      var i, l = d.items.length, newLi, newItem;
 
      $('<ul id="photoList"></ul>').appendTo('#main');
 
      for (i = 0; i < l; i++) {
        newLi = $('<li></li>');
        newItem = d.items[i];
 
        $('<h2>'+newItem.title+'</h2>').appendTo(newLi);
        $(newItem.description).appendTo(newLi);
 
        newLi.appendTo('#photoList');
 
      }
    }
  });

Mas para que servem todos esses parâmetros?

"url" => Serve para informar o destino da requisição.
"dataType" => É para declarar o formato dos dados que será usada durante a comunicação.
"crossDomain" => É para informar se a requisição será "Cross Domain"(Entre domínios diferentes) ou não.
"jsonp" => Serve para adicionar parâmetros, que seriam concatenados a URL de destino da requisição.
"jsonpCallback" => É a função que deve ser buscada, no retorno original da requisição no domínio de destino, que vai conter um argumento com todas as informações que serão retornadas. Uma espécie de involucro, que envolve o objeto a ser retornado para que você possa implementar o que será feito com os dados.
"success" => É a função callback para sua implementação. Ela vai "sobrescrever" a definição da função do parâmetro "jsonpCallback".

Mas como o Flickr faz para responder minha requisição?

Conforme os parametros GET da solicitação que você enviou, eles retornam uma função sem definição, passando o objeto JSON contendo os dados(préviamente parseados/montados) de retorno, como argumento. Para que você a sobrescreva(parametro "success") e funcione em seu site.

Exemplo:

jsonFlickrFeed({
    "title": "Uploads from everyone",
    "link": "http://www.flickr.com/photos/",
    "description": "",
    "modified": "2011-03-16T01:55:40Z",
    "generator": "http://www.flickr.com/",
    "items": [
     {
      "title": "MCBP1.jpg",
      "link": "http://www.flickr.com/photos/periodik/5530443839/",
      "media": {"m":"http://farm6.static.flickr.com/5091/5530443839_8d4cfcbbe1_m.jpg"},
      "date_taken": "2011-03-15T17:12:44-08:00",
      "description": " <p><a href=\"http://www.flickr.com/people/periodik/\">acadieux03<\/a> posted a photo:<\/p> <p><a href=\"http://www.flickr.com/photos/periodik/5530443839/\" title=\"MCBP1.jpg\"><img src=\"http://farm6.static.flickr.com/5091/5530443839_8d4cfcbbe1_m.jpg\" width=\"240\" height=\"160\" alt=\"MCBP1.jpg\" /><\/a><\/p> ",
      "published": "2011-03-16T01:55:40Z",
      "author": "nobody@flickr.com (acadieux03)",
      "author_id": "56824292@N07",
      "tags": ""
     },
     {
      "title": "Vandalism",
      "link": "http://www.flickr.com/photos/dancingastronaut/5530443865/",
      "media": {"m":"http://farm6.static.flickr.com/5016/5530443865_0648a9201b_m.jpg"},
      "date_taken": "2011-03-11T01:29:27-08:00",
      "description": " <p><a href=\"http://www.flickr.com/people/dancingastronaut/\">dancingastronaut<\/a> posted a photo:<\/p> <p><a href=\"http://www.flickr.com/photos/dancingastronaut/5530443865/\" title=\"Vandalism\"><img src=\"http://farm6.static.flickr.com/5016/5530443865_0648a9201b_m.jpg\" width=\"240\" height=\"159\" alt=\"Vandalism\" /><\/a><\/p> <p>TORQ presents Vandalism at Ruby Skye, San Francisco.<\/p>",
      "published": "2011-03-16T01:55:41Z",
      "author": "nobody@flickr.com (dancingastronaut)",
      "author_id": "53691206@N02",
      "tags": "sanfrancisco california girls party music house club night lights dance dj photoshoot dancing stage hound event turntables vandalism electro nightlife interview djs rubyskye dubstep blowup cdjs dancingastronaut dancingastronautcom"
     }
        ]
})

Então... Agora que você já sabe como implementar uma requisição AJAX Cross Domain você pode começar a brincar!

Links úteis e fontes:



Deixe sua dúvida, crítica ou sugestão nos comentários!

Um Abraço!

sexta-feira, 7 de março de 2014

NodeJS: Faça softwares escaláveis em javascript

O que é isso?

Node.js é uma plataforma construída baseada em JavaScript, para a construção de qualquer tipo de aplicações facilmente escaláveis ​e ​rápidas.


Node.js usa um modelo I / O baseado em eventos que o torna leve e eficiente, ideal para aplicações de grande volume de dados que são executados através de dispositivos diversos.



Mas porque eu trocaria o PHP por JavaScript?


Você não precisa trocar de linguagem. Você pode usar o NodeJS em conjunto com uma aplicação construída em PHP, Java, Ruby, Phyton, etc, ect.... De forma que sua aplicação obtenha um melhor desempenho e talvez uma melhor experiencia para o usuário. 

Todavia, existem algumas vantagens que merecem nossa atenção a respeito de desenvolver uma aplicação totalmente na plataforma NodeJS. São elas:

  • Escalabilidade é uma das suas melhores vantagens. Pois com muito pouca configuração conseguimos escalar um software em vários servidores com segurança e eficiência.
  • Se sua aplicação precisa de um serviço web(http ou https), você pode implementar o seu próprio com poucas linhas de código. Segurança não é um problema para o NodeJS.
  • O desempenho de aplicações construídas com NodeJS são extremamente superiores a qualquer tipo de interpretador, justamente por se tratar do interpretador V8 no qual o NodeJS foi baseado. Clique aqui para ver.
  • Você pode manter toda sua aplicação, tanto "back-end" como "front-end" feita somente com uma linguagem, facilitando o crescimento e desenvolvimento da aplicação, evitando transformar seu software em um Megazord(software hibrido).
  • Você vai encontrar mão de obra fácil, pois o javascript é uma das linguagens mais usadas no mundo justamente por causa dos "browsers".
  • A conexão com bancos de dados é extremamente rápida, principalmente com bancos de dados não relacionais como MongoDB.

Mas eu uso Ruby On Rails que é muito fácil e rápido, será que vale a pena trocar?


Lembrando que não precisa trocar de linguagem...

Porém existem frameworks de diversos tipos para NodeJS, inclusive alguns são baseados em Ruby On Rails. Um site que divulga vários desses frameworks e que pode te ajudar a escolher o que mais se adéqua a forma que você trabalha. O site é: http://nodeframework.com/

A melhor parte disso tudo é que a instalação de qualquer modulo ou framework para NodeJS é extremamente fácil, pois o NodeJS possui um sistema de controle de pacotes parecido com as Ruby Gems.

Mas eu trabalho fazendo jogos. No que o NodeJS pode me ajudar?


O NodeJS faz qualquer coisa! Já pensou em transformar seus jogos em MMOs?

Pois bem, apresento-lhes o Pomelo, um framework para desenvolvimento de games baseado em NodeJS.

Nossa! NodeJS é muito F#$@...

Sim e espero que fique cada vez melhor, pois pretendo estuda-lo cada vez mais e usa-lo integralmente nas minhas aplicações.

Por onde começar?

Comece usando NodeJS com o framework Express. Garanto que não vai se arrepender...
Links: 


Espero que gostem! Abração.

quinta-feira, 30 de janeiro de 2014

Como bloquear relays(IP's) da rede TOR que estão acessando seu servidor linux

Eu sou um fã e utilizador da rede TOR, porém meu servidor tem recebido ataques constantes e analises periódicas de vulnerabilidade através dela. Isso é um pesadelo para qualquer administrador de servidor. Portanto tive que buscar uma forma de bloquear os ips dos relays do TOR para que esse gasto de banda desnecessário parasse. Sendo assim encontrei na internet um script simples mas fantástico, que vou compartilhar e explicar como funciona.


Script:

# links -dump https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=$(links -dump ip.dnsexit.com | sed 's/ //g') | sed 's/ /\n/g' | sed -n '/^[0-9].*\..*\..*\./p' | sed -n '2,$p' | while read IP; do iptables -I INPUT -s "$IP" -j DROP; done


Dependências: 

Você precisa ter instalado no servidor o "links", uma especie de navegador para linha de comando do linux.

Script para instalar o Links no ubuntu: 
# apt-get install links

Modo de usar:

Execute isso como root em seu servidor. Sim, só isso... Mas o ideal é executar esse script pelo cron do linux periodicamente, pois cada vez que ele roda atualiza os ips que serão bloqueados pelo iptables. Lembre-se que esses ips estão sempre sendo alterados, pois qualquer um pode se tornar um relay do TOR.

O que o script faz?

Ele busca a lista de ips públicos da rede TOR que podem acessar o seu servidor, logo depois, é atualizado as regras do iptables(Firewall do Linux) bloqueando cada um dos ips para o INPUT (conexão de entrada).

Dicas:

* Se você possui IP fixo, pode trocar o subshell $(links -dump ip.dnsexit.com | sed 's/ //g') pelo seu IP, isso vai deixar a execução mais rapida, pois esse subshell pega o ip da maquina que está executando o script.* Se o serviço de firewall fica em outro servidor, substitua o INPUT por FORWARD.

Observação:


Isso não vai livrar você totalmente da rede TOR, mas vai ajudar bastante.

Fontes:
http://www.vivaolinux.com.br/dica/Bloqueando-acesso-ao-servidor-a-utilizadores-do-TOR
https://check.torproject.org/cgi-bin/TorBulkExitList.py

quarta-feira, 22 de janeiro de 2014

Pentest e vulnerabilidades em sistemas

O que é PENTEST?

O teste de penetração é um método que avalia a segurança de um sistema de computador ou de uma rede, simulando um ataque de uma fonte maliciosa. O processo envolve uma análise nas atividades do sistema, que envolvem a busca de alguma vulnerabilidade em potencial que possa ser resultado de uma má configuração do sistema, falhas em hardwares/softwares desconhecidas, deficiência no sistema operacional ou técnicas contramedidas. Todas as análises submetidas pelos testes escolhidos são apresentadas no sistema, junto com uma avaliação do seu impacto e muitas vezes com uma proposta de resolução ou de uma solução técnica. - Fonte: Wikipedia

Porque fazer esse tipo de teste?


Segurança da informação é extremamente importante nos dias atuais, principalmente pelo fato de cada vez mais dependermos desses sistemas em nossas vidas.

Só existem duas formas de saber se existem falhas de segurança em seu sistema ou rede:
1) O sistema foi invadido por um hacker/cracker e o mesmo informou as vulnerabilidades existentes.
2) Você descobre as vulnerabilidades antes do hacker.

Eu particularmente prefiro a segunda opção... Até porque acredito que a maioria dos hackers e principalmente os crackers não informam a vulnerabilidade que descobriram.

Quais são as causas e efeitos?


Um sistema mal feito em conjunto com uma infraestrutura mau projetada pode causar um prejuízo tremendo para qualquer empresa ou pessoa. Dentre os prejuízos mais comuns estão perda e sequestro de dados sigilosos. Já parou para pensar se algum banco deixa vazar suas informações bancarias?

Seguem algumas ferramentas técnicas essenciais que eu mesmo uso para fazer teste de penetração em redes ou testar vulnerabilidades de aplicações web dos meus clientes:

NMap => Detecta topologia, portas e serviços de uma rede ou host, assim como detecta versão de SO entre outras coisas.

SQLmap => Ótimo escâner de vulnerabilidade em sistemas, com foco em sqlinjection com exploitation.

Openvas => Scanner genérico de vulnerabilidade de sistemas e redes.

Metasploit => Scanner genérico de vulnerabilidade de sistemas e redes. (Prefiro Openvas).

BackTrack/Kali Linux => (Meu preferido) Sistema operacional baseado em linux especialmente desenvolvido para testes de vulnerabilidades em todos os tipos de aplicações redes e dispositivos.

Dica: O BackTrack/Kali Linux tem todas as ferramentas citadas e muitas outras.

Espero ter ajudado.

Links úteis:

https://www.kali.org/
http://www.backtrack-linux.org/
http://www.openvas.org/
http://sqlmap.org/
https://nmap.org/