sexta-feira, 10 de fevereiro de 2012

Nginx: Solução para "413 Request Entity Too Large"

Ao tentar enviar arquivos com tamanho superior a 1,5MB, o servidor apresentava o seguinte erro:

413 Request Entity Too Large

Depois de alguma pesquisa, encontramos a solução. É preciso editar o arquivo de configuração do nginx, adicionando o parâmetro client_max_body_size.

Passos:
  1. Descubra onde está esse arquivo no seu sistema. Ex: 
  2. locate /nginx.conf
  3. Edite o arquivo para adicionar o limite para o tamanho do arquivo em sever. Ex:
  4. vim /opt/nginx/conf/nginx.conf
  5. Adicione a linha com o limite desejado. Ex:
  6. server {
    client_max_body_size 20M;
    listen 80;
    server_name server.virtual.ufc.br;
    root /path;
     }
  7. Recarregue o Nginx
  8. sudo /opt/nginx/sbin/nginx -s reload


Referências:
http://recursive-design.com/blog/2009/11/18/nginx-error-413-request-entity-too-large/
http://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/

sábado, 28 de janeiro de 2012

Dica: Plug-in Adobe Flash desatualizado no Google Chrome - Ubuntu



Há alguns dias, percebi que o Google Chrome, instalado no Ubuntu 11.04, não estava carregando conteúdo Flash. Apresentava a mensagem: O plug-in-Flash foi desativado por estar desatualizado.


Ver um botão "Atualizar plug-in..." da a falsa impressão de que basta clicar, que estará tudo resolvido. Não é tão simples!

O que fazer:
  1. Clique no botão "Atualizar plug-in..."
  2. Na página de download, clique em "Selecione a versão para fazer download...". Selecione ".tar.gz para outro Linux" e clique no botão "Baixe Agora"
  3. Terminado o download, será preciso descompactar. Para isso, abra o Nautilus, encontre o arquivo e clique sobre ele com o botão direito do mouse. Escolha a opção "Extrair aqui", no menu de contexto
  4. No Google Chrome, digite chrome://plugins/ na barra de endereços e localize o Flash
  5. Verifique o endereço em "Local". Nesse caso, /usr/lib/mozilla/plugins/
  6. Abra o terminal. Será preciso copiar o arquivo baixado para o substituir o indicado 
  7. Vá até a pasta onde foi descompactado o arquivo
    cd Downloads/install_flash_player_11_linux.x86_64
  8. Copie o arquivo para o local verificado no passo 5:
    sudo cp Downloads/install_flash_player_11_linux.x86_64/libflashplayer.so /usr/lib/mozilla/plugins/
  9. Feche o Chrome e abra novamente.

Pronto, o Adobe Flash está atualizado.










segunda-feira, 6 de setembro de 2010

[Akita Responde] Começando com Ruby on Rails

Se alguém está como eu, sem saber por onde começar a estudar Ruby (on Rails), pode dar uma olhada nessas dicas do Akita, http://akitaonrails.com/2010/06/21/akita-responde-comecando-com-ruby-on-rails. Ele cita várias referências. Entre elas, o Aprenda a Programar, pra quem quer começar a programar já com Ruby e o O Guia (Comovente) de Ruby do Why.

quarta-feira, 1 de setembro de 2010

Segredinhos do Chrome

O Chrome desde seu lançamento é elogiado pela agilidade na navegação, mas muita gente ainda usa o Firefox, que apesar de mais lento, possui ótimos recursos, os famosos add-ons. Mas o fato é que o Chrome anda dando uma melhorada nas suas funções. Recentemente - e meio sem querer - descobri que o Chrome tem uma espécie de firebug embutido. Funciona assim, clique com o botão direito na página e vá em "Inspecionar elemento":



Então abra-se uma janela com várias informações sobre a página, desde o rss e html até os cookies da página.



Vantagens: O visual é bacana e ele apresenta funções a mais que o Firebug
Desvantagens: Ainda não descobri qual é o atalho para abrir a inspeção

quinta-feira, 26 de agosto de 2010

Criptografia utilizando JAVA e .NET

Um problema recorrente aqui no laboratório é a troca de dados sensíveis entre sistemas que utilizam tecnologias diferentes. Resumindo o problema:

  • Trata-se de informação sensível;

  • A informação, muitas vezes, trafega por redes inseguras e vulneráveis;

  • Os sistemas interessados utilizam tecnologias diferentes.


A ideia aqui é utilizar3DES, um algoritmo de chave simétrica ao mesmo tempo seguro e suportado pela maioria das tecnologias atuais. Antes de continuar com a solução, vamos dar uma olhada no exemplo de classes JAVA e .NET(C#) compatíveis entre si.

Java:

public class Cipher3DES {

SecretKeySpec chave;
IvParameterSpec iv;
Cipher cifrador;

public Cipher3DES(String key, String initializationVector) throws Exception {
cifrador = Cipher.getInstance("DESede/CBC/PKCS5Padding");
chave = new SecretKeySpec(key.getBytes("UTF8"), "DESede");
iv = new IvParameterSpec(initializationVector.getBytes());
}

public String encryptText(String original) throws Exception {
byte[] plaintext = original.getBytes("UTF8");
cifrador.init(Cipher.ENCRYPT_MODE, chave, iv);
byte[] cipherText = cifrador.doFinal(plaintext);
return new String(Base64Coder.encode(cipherText));
}

public String decryptText(String hidden) throws Exception {
byte[] hiddentext = Base64Coder.decode(hidden.toCharArray());
cifrador.init(Cipher.DECRYPT_MODE, chave, iv);
byte[] originalText = cifrador.doFinal(hiddentext);
return new String(originalText);
}
}

Exemplo de uso:

Cipher3DES c = new Cipher3DES("012345678901234567890123", "01234567");
String segredo = "Frase que não deve ser lida";
String escondido = c.encryptText(segredo);
String original = c.decryptText(escondido);

.NET(C#):

public class Cipher3DES{

TripleDESCryptoServiceProvider tdes;

public Cipher3DES(string chave, string iv){
if (chave.Length != 24)
throw new Exception("Chave de criptografia deve ter tamaho 24");
if (iv.Length != 8)
throw new Exception("Vetor de inicialização deve ter tamaho 8");

tdes = new TripleDESCryptoServiceProvider();
tdes.Key = Encoding.UTF8.GetBytes(chave);
tdes.IV = Encoding.UTF8.GetBytes(iv);
}

public string encryptText(string textToEncrypt){
byte[] buffer = Encoding.UTF8.GetBytes(textToEncrypt);
return Convert.ToBase64String(tdes.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));
}

public string decryptText(string textToDecrypt){
byte[] buffer = Convert.FromBase64String(textToDecrypt);
return Encoding.UTF8.GetString(tdes.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
}
}

Exemplo de uso:

Cipher3DES c = new Cipher3DES("012345678901234567890123", "01234567");
String segredo = "Frase que não deve ser lida";
String escondido = c.encryptText(segredo);
String original = c.decryptText(escondido);

Considerações sobre a solução

  • Enquanto o .NET é bastante flexível quanto aos tamanhos da chave e do vetor de inicialização, o JAVA é bastante restritivo, de acordo com o padrão de chaves de 168 bits e ivs de 8 bytes.

  • Por questões de compatibilidade, os exemplo utilizam sempre UTF8 e os resultados das criptografias são representados em base64. Note que a base64 é suportada por padrão no .NET, enquanto em JAVA nós utilizamos a classe Base64Coder.

  • As implementações do algoritmo de criptografia utilizadas foram javax.crypto.Cipher do JAVA e System.Security.Cryptography do .NET.



Fontes:
http://en.wikipedia.org/wiki/Triple_DES
http://blog.bluesam.com/2009/07/triple-des-encryption-implementation.html
http://tripoverit.blogspot.com/2009/06/tripledes-encryption-compatibility.html
http://www.source-code.biz/base64coder/java/

quarta-feira, 11 de agosto de 2010

Por que criamos este blog


Bem, estamos trabalhando há vários anos com desenvolvimento de aplicações Web em nosso Instituto na Universidade Federal do Ceará, e depois deste tempo todo passamos por diversos problemas relacionados às plataformas tecnológicas que adotamos. Graças a ideia de um colega nosso, Rafael Costa, resolvemos criar este espaço virtual para podermos trocar com a comunidade em geral algumas soluções que criamos ou que encontramos em nossas navegações pela Web. Estamos querendo, portanto, dar um primeiro passo no processo de construção coletiva de conhecimento, uma das principais características da Web2.0. Espero que todos possam contribuir conosco, criticando e sugerindo novas soluções que possam ser úteis no processo de criação de aplicações para Web.

Que a Força esteja com todos!