Arquivo de setembro, 2016

Recentemente precisei de um a rotina para verificar a força de uma senha. Encontrei o artigo abaixo que achei muito interessante:

Olá pessoal, hoje eu vou falar e mostrar como fazer senhas fortes usando a linguagem C#. Antes de começar a mostrar e explicar o código, é importante entender porque precisamos de senhas fortes e a atualização periódica.

Como arquiteto de software e professor de faculdade, os profissionais estão se formando e entrando no mercado de trabalho sem dar importância no uso de criptografia de dados, senhas criptografadas e segurança da informação. Isso me preocupa porque qualquer hacker que tente entrar na aplicação, site ou sistema construído, usando a forma mais básica de invasão, eles conseguem entrar.

Já falei em outros artigos a importância de criptografar dados, criptografar banco de dados e senhas de acesso por exemplo: na string de conexão com o banco de dados e dados dos usuários. Os dados pessoais não podem estar expostos facilmente. Os dados pessoais são tão importantes quanto o sistema, na minha opinião mais importantes do que o sistema em si (opinião pessoal). Nenhum programador ou analista de sistemas que sai da faculdade importa com a segurança dos dados e a segurança no momento de programar. Só quer ver o software funcionando e nada mais.

Além de criptografar dados, é necessário fazer com que o usuário digite senhas difícieis, senhas com letras, números, caracteres especiais e mais. Para isso, os programadores precisam ajudar os usuários que usam o software, ajudar no sentido de cadastro, travamento de senhas fáceis e tudo mais. O software veio para facilitar a vida do usuário e não complicar, mas o grande problema são os hackers ou os programas que os hackers fazem. Eles utilizam métodos para forçar a senha usando as mais óbvias como 12345 e outras. O software não pode deixar que isso aconteça, deve travar todo tipo de solicitação fácil de senha.

O que vou mostrar aqui é um passo a passo usando C# e o primeiro passo é verificar se a senha está entre 6 e 12 caracteres. Lembro que é um exemplo apenas. Listagem 1.

Listagem 1 – Verifica a quantidade de caracteres existentes na senha digitada.

if (senha.Length < 6 || senha.Length > 12)

A senha digitada deve ter entre 6 e 12 caracteres, isto é, o mínimo são 6 e o máximo são 12 caracteres. A variável senha é do tipo string.

O segundo passo é verificar se existe pelo menos um número digitado, nesse caso, é importante ter pelo menos um número digitado na senha. Veja a listagem 2.

Listagem 2 – Verifica se existe pelo menos um número na senha.

if (!senha.Any(c => char.IsDigit(c)))

O terceiro passo é verificar se o usuário digitou pelo menos uma letra maiúscula, no nosso caso, quanto mais misturar letras, números, maiúsculos e minúsculos melhor. A listagem 3 mostra se existe letras maiúsculas.

Listagem 3 – Verifica se existe pelo menos uma letra maiúscula.

if (!senha.Any(c => char.IsUpper(c)))

O quarto passso é simples como o terceiro, só verifica se existe algum valor com caracter minúsculo. É necessário ter pelo menos 1 minúsculo. Veja a listagem 4.

Listagem 4 – Verifica se existe pelo menos um caracter minúsculo.

if (!senha.Any(c => char.IsLower(c)))

O quinto passo é interessante. Hoje existem pessoas que estão colocando caracteres especiais nas senhas, como #, $, %, espaço e tudo mais. Esses caracteres podem ser verificados se você quiser, basta verificar a existência de pelo menos um caracter especial, veja a listagem 5.

Listagem 5 – Verifica se existe algum caracter especial.

if (!senha.Any(c => char.IsSymbol(c)))

Existem sistemas que não permitem caracteres especiais, pra isso você precisa verificar se o que foi digitado não existe caracter especial. Se existir algum caracter especial, o sistema indica retorna ao usuário. Esse código é simples também, veja a listagem 6.

Listagem 6 – Verifica se não existe algum caracter especial.

if (!(senha.All(c => char.IsLetter(c) || char.IsDigit(c))))

Note que a listagem 6 verifica se a senha existe além de letra e número, outro caracter. Não existindo só letra e número, o sistema solicita nova senha ao usuário explicando que não pode colocar caracter especial. O caracter espaço não é aceito.

Já desenvolvi sistemas que por regra não podem repetir mais de duas letras iguais na senha. Isso faz com que a mesma letra repita apenas duas vezes, se tiver mais do que duas o sistema pede para o usuário alterar. Nesse caso, é necessário fazer uma laço e verificar se tem a mesma letra repetida mais de duas vezes. Veja a listagem 7.

Listagem 7 – Verifica se existe mais que dois caracteres repetidos.

    var contadorRepetido = 0;
    var ultimoCaracter = '\0';
    foreach(var c in senha)k
    {
        if (c == ultimoCaracter)
            contadorRepetido++;
        else
            contadorRepetido = 0;
        if (contadorRepetido == 2)
            return false;
        ultimoCaracter = c;
    }

Tudo que foi falado aqui serve para que você, utilizar no seu software, sistema ou site. Foi verificado todos os caracteres para que a senha do usuário fique forte e ao mesmo tempo difícil de descobrir por um hacker. É lógico que, com uma senha difícil pode ser que o usuário esqueça facilmente. É bom criar um envio de senha por e-mail ou celular, assim fica simples no caso de esquecimento.

A minha dica é: coloque todas essas verificações dentro de um método do tipo estático, com parâmetro de entrada do tipo string e retorno Boolean. A listagem 8 mostra um exemplo.

Listagem 8 – Método completo

public static Boolean verificaSenhaForte(string senha){
if (senha.Length < 6 || senha.Length > 12)
return false;
if (!senha.Any(c => char.IsDigit(c)))
return false;
if (!senha.Any(c => char.IsUpper(c)))
return false;
if (!senha.Any(c => char.IsLower(c)))
return false;
if (!senha.Any(c => char.IsSymbol(c)))
return false;

    var contadorRepetido = 0;
    var ultimoCaracter = '\0';
    foreach(var c in senha)k
    {
        if (c == ultimoCaracter)
            contadorRepetido++;
        else
            contadorRepetido = 0;
        if (contadorRepetido == 2)
            return false;
        ultimoCaracter = c;
    }
return true;
}

Espero que tenha gostado de tudo que foi explicado aqui. Foi um bom aprendizado, aproveite o que aprendeu e coloque em seu software para assegurar que usuários usem senhas difícieis para os hackers.

Qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org.

Fonte: https://msdn.microsoft.com/pt-br/library/dn425137.aspx

E ai pessoas, como tenho recebido alguns e-mails pedindo para mostrar “como fazer para que outros computadores acessem o meu banco de dados” e “habilitar o acesso remoto do SQL Server 2008”, então vamos à demonstração!

Antes de começar, se o servidor estiver fora de um “domínio” ou você não saiba o que é “domínio”, dê uma olhada neste artigo:
https://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/

Em seguida, habilitamos o Firewall do Windows (permitindo exceções). Mas para ambientes de teste não há problema em deixá-lo desabilitado.

Dentre as diversas exceções, adicionamos mais uma porta:

Para boa parte dos cenários, a porta TCP 1433 já vai suprir as necessidades:

Em outros cenários mais específicos, pode existir a necessidade de habilitar as portas UPD 1434, TCP 1434 e outras (at. http://msdn.microsoft.com/en-us/library/ms175483.aspx ).

No SQL Server Management Studio, verifique se nas propriedades do servidor esta habilitada a opção “Allow remote connections to this server”. Caso não esteja habilitada, será necessário habilitá-la.

No SQL Server Configuration Manager, mais precisamente nos protocolos da sua instância (ex.: SQLEXPRESS, SQL2005, MSSQLSERVER…), entre nas propriedades do protocolo TCP/IP:

E habilite o protocolo TCP/IP. Em alguns cenários também se faz necessário habilitar o protocolo “Named Pipes”.

E recomendo definir a porta de conexão:

Se você quiser configurar outras portas para o SQL Server, dê uma olhada neste artigo:
https://sqlfromhell.wordpress.com/2009/09/05/portas-sql-server/

Reinicie o serviço do SQL Server da sua instância e o SQL Server Browser, depois em uma máquina cliente, tente se conectar ao servidor com um usuário válido:

Se tudo ocorrer como previsto, teremos a conexão:

Bem, estou usando uma VM “zerada” que até o momento tem o Windows Server 2003 R2 e o SQL Server 2008, assim existe grande possibilidade de não funcionar em outros cenários.

Pontos a levar em consideração para tratar outros cenários:

  • Se você não conseguir ao menos dar um “ping” ou compartilhar uma pasta do servidor à rede ou conectar remoto com o Remote Desktop Connection (mstsc.exe), isso pode ser sinal que tem algo errado com o firewall ou a rede ou até mesmo com o Windows (então não é culpa do SQL Server, ainda…).
  • Programas de Antivírus ou Firewall de terceiros, também são grandes culpados por problemas com o acesso remoto, tanto no servidor como no cliente.
  • O usuário que você esta utilizando para se conectar pode não ter permissão para se conectar ou o servidor não esta no domínio (at. https://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/ ). Para “testar”, no servidor tente se conectar ao SQL Server com o usuário que você esta utilizando na máquina cliente.
  • Para “testar”, não utilize o SQL Server Management Studio 2005 para se conectar a um SQL Server 2008, pois algumas vezes isso não dá muito certo.

Mais uma coisa, se eu não responder um comentário em 24h é sinal que não estou com acesso à internet, pois possivelmente estarei preso na ilha de LOST (probabilidade 0,001%) ou estou numa “missão” extraordinária pelo Exército Brasileiro (probabilidade 4%) ou estou apagando algum incêndio em alguma consultoria (probabilidade 85%) ou dedicado a algum trabalho acadêmico (probabilidade 10%), então também vale a pena procurar os fóruns do MSDN e/ou o suporte da Microsoft.

Na internet, encontrei outros dois artigos bons sobre o assunto:

Instalando e Configurando o SQL Server 2005 Express – Nilton Pinheiro:
http://www.mcdbabrasil.com.br/downloads/install_sqlexpress.pdf

Como configurar Conexão Remota no SQL Server 2005 – Diego Nogare:
http://www.linhadecodigo.com.br/artigo/1260/como-configurar-conexao-remota-no-sql-server-2005.aspx

 

Fonte: https://sqlfromhell.wordpress.com/2010/04/18/habilitando-o-acesso-remoto-no-sql-server-2008/