Archive for October, 2006

SQL Injection - Para Iniciantes

Tuesday, October 31st, 2006

Este material é para aqueles que estão iniciando no PHP agora.

Com certeza já devem ter ouvido falar nesse termo, “SQL Injection”, que é uma maneira de enganar o sistema ou site inserindo SQL nos campos de login, senha, busca e outros.

A pouco tempo atrás quando estava buscando vídeos na internet, encontrei um site que precisava de cadastro para poder ver o site, e com preguiça de cadastrar, joguei um dos comandos mais básicos que é:

‘ OR ” = ” OR 1 = 1 OR ” = ‘

Esse comando deixa a validação de sistemas não seguros “LOUCOS”, permitindo o acesso sem precisar nem de um usuário e muito menos de uma senha. Mas aconselho, não façam isso em casa!

Bom esse foi um exemplo que fiz para o professor da Unerj, Manfred Heill Jr. com objetivo de apresentar a insegurança nos Sistemas de Informação.

Para entender melhor, faça o download do exemplo e faça alguns testes:

sqlInjection.zip

Esse exemplo tem como finalidade apenas mostrar furos nos SI, visando melhores aplicações para WEB.

Andrey Pedro Lefkum

AJAX - Desenvolvendo com prototype

Tuesday, October 31st, 2006

Comecei a usar o Prototype a pouco tempo através da recomendação do Giovani Dalfovo. O Prototype é um framework em JavaScript que agiliza o trabalho do desenvolvedor, claro, como todo framework!

Ele já vem com suporte a fila de requisições Ajax e algumas outras praticidades.

Abaixo um exemplo de chamadas ao Google através da metodologia Ajax como uso do framework Prototype.

...
<script>

function chamaPagina(url,pars) {

   /* Esse é o cara principal, ele que é responsável
   pela requisição. Como parâmetros temos, a url, o metodo,
   parâmetros e qual a função que receberá o retorno */

   var objetoAjax = new Ajax.Request( url, {
   method: \'post\', parameters: pars, onComplete: mostraResposta });

}

/* Função que recebe o retorno */

function mostraResposta(retorno) {

   var texto = retorno.responseText;

   texto = texto.replace(/\\+/g,\" \");

   texto = unescape(texto);

   /* $ substitui o document.getElementById */

   $(\'conteudo\').innerHTML = texto;

}

</script>

<div id=\"conteudo\"></div>

<a onclick=\"carregaPagina(\'http://www.google.com.br\',\'\');\"
href=\"http://www.andrey.eti.br/wp-admin/post.php#\">Google</a>

...

isso… Simples!

Descoberta nova vulnerabiliade no Internet Explorer 7

Thursday, October 26th, 2006

SÃO PAULO - Uma semana depois de ser lançado, a empresa de segurança Secunia identificou uma nova vulnerabilidade no Internet Explorer 7, nova versão do programa navegador da Microsoft. A falha em questão, a segunda identificada até aqui, permite que invasores realizem ataques do tipo phishing scam, em que o internauta é levado a páginas falsas de serviços conhecidos, com o intuito de roubar informações do usuário. As novas brechas do IE7 estão surgindo apesar do esforço que a Microsoft alegou empreender para fazer do navegador um aplicativo mais seguro.

Fonte: Estadão
http://www.estadao.com.br/tecnologia/internet/noticias/2006/out/25/207.htm

Firefox 2.0 está na web

Tuesday, October 24th, 2006

SÃO PAULO - A Fundação Mozilla disponibilizou hoje em seu site a versão final do browser Firefox 2.0. Ela chega apenas seis dias depois da versão RC3, a última já com o selo de candidata a lançamento.

Baixe aqui o Firefox 2.0. Fonte: INFO On-line
http://info.abril.com.br/aberto/infonews/102006/23102006-15.shl

Protótipo (OO) ou (OP) com JS

Friday, October 20th, 2006

Para quem não sabe o que é prototype:

O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários. Ao invés de passar um objeto BicycleFactory, um objeto Bicycle é recebido como argumento. Seu método clone() é invocado para criar novos objetos Bicycle; estamos construindo cópias do objeto fornecido.� (Fonte: Wikipédia)

http://pt.wikipedia.org/wiki/Prototype

Bom esse exemplo abaixo foi enviado pelo Giovani Dalfovo, que é desenvolvedor de várias linguagens que nem sei qual :-D, mas pelo que sei ele é fera em JS, então se precisam de algo sobre o JavaScript pode acessar o site www.suntuoso.com

var MeuPrototipo = {};
MeuPrototipo.prototype = {
prop1: “”,
prop2: “”,

evento1: function(lala){
this.prop1 = lala;
},

evento2: function(hoho,aa){
this.prop2 = hoho + aa;
}
};

É claro que isso vai fazer com que vc instancie o “objeto” forçando o Prototipo a usar um método como construtor do mesmo, mais ou menos assim:

var coisa = new MeuPrototipo.evento1(’teste’);

Baseando-se nas melhores práticas novamente, eu fiz um construtor de classe (protótipo) que já deixa implícito um método como construtor, ficando assim:

var Classe = {
cria: function() {
return function() {
this.construtor.apply(this, arguments);
}
}
}

Dessa maneira você pode criar o seu protótipo assim:

var MeuPrototipo = Classe.cria();
MeuPrototipo .prototype = {
prop1: “”,
prop2: “”,

construtor: function(lala){
this.prop1 = lala;
},

evento2: function(hoho,aa){
this.prop2 = hoho + aa;
}
}

Agora para fazer a instância do “objeto” é só chamar assim:

var coisa = new MeuPrototipo(”lala”);

Assim ele irá chamar automaticamente o método construtor “construtor”.

Fonte: Giovani Dalfovo

Obs.: Não mudei nada que o desenvolvedor Giovani escreveu em seu e-mail ao sanar algumas dúvidas da minha pessoa :-D

AJAX - Fila de Requisições

Tuesday, October 17th, 2006

Como fazer fila de requisições em AJAX?

Tá mas o que é isso?

Filas de requisições no Ajax, foram inventadas para não perder nenhuma requisição do usuário, ou seja, quando realizava uma consulta no servidor através do Ajax, e antes mesmo de concluir a chamada o usuário clicar em outro link, o Ajax perde essa primeira chamada e atende a segunda, esse é um grande problema em algumas situações!

Abaixo segue o link para download de um exemplo que fiz de uma calculadora “simple”, somente para explicar como funciona. Lembrando que parte do código foi COPIADO de tableless.com.br, apenas para fins de estudo e explicação desse artigo. Dentro do código será possível visualizar algumas “gambis” que fiz, puts que coisa feita, gambiarra!?!!? Sim gambiarra, não estava conseguindo deixar o sinal de “+” dentro de uma variável PHP ainda não sei por qual motivo, claro que esse também não é o foco.

Como funciona:

  1. Usuário clica em um link.
  2. O link chama uma função
  3. A função valida se já não existe outra requisição sendo executada
  4. Caso não tenha executa a chamada
  5. Se já tiver uma requisição sendo executada, ele joga a requisição em uma fila de espera
  6. E o que acontece com os da fila? As requisições que estão na fila são chamadas uma a uma após conclusão das chamadas.
  7. Conclui ao não encontrar mais requisições na fila.

Bom é isso se tiverem alguma dúvida, mandem um recado, que entrarei em contato. Ah mesmo se não tiver dúvida deixe um recado para dize se gostou ou não desse texto mal feito acima :-D

Download do exemplo: Filas com AJAX

Colaboração para testes, opiniões mal estruturadas e criticas destrutivas: Eliton José da Silva, esse é o cara!

Polimorfismo com PHP

Monday, October 16th, 2006

Exemplo de POLIMORFISMO com PHP por Daniel Henrique Bolioli.
Obs.: Somente foi testado em PHP5, pode ser que não funcione em PHP4.

class Operacao {
function calc($x,$y,$obj) {
return $obj->calcular($x,$y);
}
}

class Soma extends Operacao {
function calcular($x,$y) {
return $x + $y;
}
}

class Subtracao extends Operacao {
function calcular($x,$y) {
return $x - $y;
}
}

$obj = new Operacao();
/*
Em vez de criar o objeto também pode
passar um objeto já existente como parâmetro.
*/
echo $obj->calc(2,2,new Soma());
echo "-";
echo $obj->calc(8,3,new Subtracao());

Autor: Daniel Henrique Bonioli (Gerente de Projetos - Decisão Informática).

“Momento Cafézinho” - Pensamento Lateral

Friday, October 6th, 2006

PensandoTodos desenvolvedores “cafeinados” já passaram por essa situação antes… Sabe aquele momento que estamos em um relatório que leva umas 12 horas para desenvolver, super complexo, com umas 150 linhas de SQL, e que chega em um ponto que aparentemente não há uma solução? Então nesse instante é indispensável LIGAR o momento cafézinho. Ok, mas o que tem em comum o café com o relatório complexo? Aparentemente nada, mas nesse instante que você se engana!

Tá, na verdade não tem nada com a história mesmo! Mas somente o fato de levantar da cadeira e desligar sua conexão com o computador, e desativar sua conexão vertical, e dar início ao pensamento lateral… Calma ae!!! O que esse cara ta falando?

Ok… Pensamento vertical e pensamento lateral, o que seriam? Pensamento vertical é aquele pensamento rotineiro que temos, como por exemplo, fazer uma conta de 1 + 0, que matemáticamente falando daria como resultado 1, mas se tivessemos um pensamento lateral, que é pensar no que você não está pensando, ou seja, poderiamos dar o exemplo de uma conta binária em que 1 + 0 teria como resultado 0. O pensamento lateral é ver problemas, soluções de modos diferentes ao que estamos acostumados a ver!

A questão é estudar a ignorância para entender a sabedoria!

Andrey Pedro Lefkum

Google - Code Search

Thursday, October 5th, 2006

codesearch_logo.gifGoogle lança mais nova ferramenta voltada totalmente aos desenvolvedores, o Google Code Search foi desenvolvido para facilitar a busca de exemplos de fontes.

Para ver um exemplo clique no link abaixo:

http://www.google.com/codesearch

Digite a expressão “XMLHttpRequest” para ver como utilizar esse metodo Javascript.

Enviando Anexo com a função mail();

Wednesday, October 4th, 2006

Muitos usam a função mail somente para

enviar e-mails, mas nem imaginam que é possível
enviar anexos com esta função.

vamos ao que interessa:

Boundary é a marcação que o programa de email vai
levar em conta na hora da separação das partes do
email. No corpo do email ele é identificado como ‘–’ mais o boundary!

$boundary = strtotime(’NOW’);

$headers = “From: Eu \n”;
$headers .= “MIME-Version: 1.0\n”;
$headers .= “Content-Type: multipart/mixed; boundary=\”" . $boundary . “\”\n”;

$msg = “–” . $boundary . “\n”;
$msg .= “Content-Type: text/plain; charset=\”iso-8859-1\”\n”;
$msg .= “Content-Transfer-Encoding: quoted-printable\n\n”;

$msg .= “Aqui eu escrevo o texto do email\n”;

$msg .= “–” . $boundary . “\n”;
$msg .= “Content-Transfer-Encoding: base64\n”;
$msg .= “Content-Disposition: attachment; filename=\”imagem.gif\”\n\n”;

/*Esta parte define a imagem em si! Primeiramente eu envio os
identificadores de anexo, com o nome do anexo. Mais
embaixo, eu pego o conteúdo do arquivo ( readfile
(”imagem.gif”); ) e o encripto com o base64 (formato
padrão dos anexos no email!).

É nessa parte que tem que se tomar cuidado, pois pelo
RFC as linhas do email não podem ser muito grandes.
Por isso o FOR “quebra” o conteudo do arquivo em
pedaços de 76 caracteres!*/

ob_start();
readfile(”imagem.gif”);
$enc = ob_get_contents();
ob_end_clean();

$msg_temp = base64_encode($enc). “\n”;
$tmp[1] = strlen($msg_temp);
$tmp[2] = ceil($tmp[1]/76);

for ($b = 0; $b <= $tmp[2]; $b++) {
$tmp[3] = $b * 76;
$msg .= substr($msg_temp, $tmp[3], 76) . “\n”;
}

unset($msg_temp, $tmp, $enc);

mail(”para@email.com.br”, “Assunto”, $msg, $headers);

?>

Qualquer dúvida…
andrey@andrey.eti.br


This is a free Wordpress template provided by Mathew Browne | Web Design | SEO