Salvando a pele do Programador php – SQL injection

Colaboração: Altemir Braz Dantas Junior – Dicas-L
Data de Publicação: 02 de fevereiro de 2011
link:http://www.dicas-l.com.br/arquivo/salvando_a_pele_do_programador_php_sql_injection.php

São poucos os programadores que pensam em “Segurança” quando estão desenvolvendo suas aplicações. Vou passar uma dica que salvará esse programadores rsrsrsr.

Então vamos lá, primeiramente crie um arquivo php contendo as seguintes linhas:

ex: security.php

<?php

/*
aqui vai varrer todos os REQUEST,POST e GET e jogar o seu valor para
função limpa_sqlinjection, e retornar para o proprio REQUEST,POST e GET.

*/

foreach ($_REQUEST as $index=>$valor){
$_REQUEST[$index] = limpa_sqlinjection($valor);
}
foreach ($_GET as $index=>$valor){
$_GET[$index] = limpa_sqlinjection($valor);
}
foreach ($_POST as $index=>$valor){
$_POST[$index] = limpa_sqlinjection($valor);
}

function limpa_sqlinjection($var){
/*
aqui você pode colocar todas as formas de proteção que você ja utiliza
para seu banco de dados contra sql injection, vou colocar um exemplo
que é a função mysql_real_escape_string
*/
$var = mysql_real_escape_string($var);

// caso nao tenha a function mysql_real_escape_string use a mysql_escape_string

return $var;
}

?>

Agora é só dar um include desse arquivo na lib principal ou em todos os arquivos php que recebem POST,GET ou REQUEST, assim todas essas formas estarão protegidas mesmo que o programador esqueça de filtrar.

Problema de acentuação na pesquisa PHP/MySQL

Galera boa tarde…

Recentemente tive problema com minha consulta PHP/MYSQL, em determinadas consultas com acentos  ele me trazia o resultado esperado e em outras não. Fiz uma pesquisa uma pesquisa na net e encontrei esse material muito legal, vale apenas usar..

A FUNÇÃO

<?
/*******************************************************************************
Exemplo do artigo “PESQUISA COM ACENTOS DENTRO DO MYSQL”
-
drSolutions – Tecnologia e Informática
-
Diego M. Rodrigues
diego@drsolutions.com.br
——————————————————————————-
Função que Montas as REGEXP
Rev. Ago/2007
*******************************************************************************/

function stringParaBusca($str) {
//Transformando tudo em minúsculas
$str = trim(strtolower($str));

//Tirando espaços extras da string… “tarcila  almeida” ou “tarcila   almeida” viram “tarcila almeida”
while ( strpos($str,”  “) )
$str = str_replace(“  “,” “,$str);

//Agora, vamos trocar os caracteres perigosos “ã,á…” por coisas limpas “a”
$caracteresPerigosos = array (“Ô,”ã”,”Õ”,”õ”,”á”,”Á”,”é”,”É”,”í”,”Í”,”ó”,”Ó”,”ú”,”Ú”,”ç”,”Ç”,”à”,”À”,”è”,”È”,”ì”,”Ì”,”ò”,”Ò”,”ù”,”Ù”,”ä”,”Ä”,”ë”,”Ë”,”ï”,”Ï”,”ö”,”Ö”,”ü”,”Ü”,””,”Ê”,”Δ,”Ô”,”Û”,”â”,”ê”,”î”,”ô”,”û”,”!”,”?”,”,”,”“”,”””,”-”,”\”",”\\”,”/”);
$caracteresLimpos    = array (“a”,”a”,”o”,”o”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”c”,”c”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”a”,”a”,”e”,”e”,”i”,”i”,”o”,”o”,”u”,”u”,”A”,”E”,”I”,”O”,”U”,”a”,”e”,”i”,”o”,”u”,”.”,”.”,”.”,”.”,”.”,”.”,”.” ,”.” ,”.”);
$str = str_replace($caracteresPerigosos,$caracteresLimpos,$str);

//Agora que não temos mais nenhum acento em nossa string, e estamos com ela toda em “lower”,
//vamos montar a expressão regular para o MySQL
$caractresSimples = array(“a”,”e”,”i”,”o”,”u”,”c”);
$caractresEnvelopados = array(“[a]“,”[e]“,”[i]“,”[o]“,”[u]“,”[c]“);
$str = str_replace($caractresSimples,$caractresEnvelopados,$str);
$caracteresParaRegExp = array(
“(a|ã|á|à|ä|â|&atilde;|&aacute;|&agrave;|&auml;|&acirc;|Ã|Á|À|Ä|Â|&Atilde;|&Aacute;|&Agrave;|&Auml;|&Acirc;)”,
“(e|é|è|ë|ê|&eacute;|&egrave;|&euml;|&ecirc;|É|È|Ë|Ê|&Eacute;|&Egrave;|&Euml;|&Ecirc;)”,
“(i|í|ì|ï|î|&iacute;|&igrave;|&iuml;|&icirc;|Í|Ì|Ï|Î|&Iacute;|&Igrave;|&Iuml;|&Icirc;)”,
“(o|õ|ó|ò|ö|ô|&otilde;|&oacute;|&ograve;|&ouml;|&ocirc;|Õ|Ó|Ò|Ö|Ô|&Otilde;|&Oacute;|&Ograve;|&Ouml;|&Ocirc;)”,
“(u|ú|ù|ü|û|&uacute;|&ugrave;|&uuml;|&ucirc;|Ú|Ù|Ü|Û|&Uacute;|&Ugrave;|&Uuml;|&Ucirc;)”,
“(c|ç|Ç|&ccedil;|&Ccedil;)” );
$str = str_replace($caractresEnvelopados,$caracteresParaRegExp,$str);

//Trocando espaços por .*
$str = str_replace(” “,”.*”,$str);

//Retornando a String finalizada!
return $str;
}
?>

CHAMADA PARA EXECUTAR A FUNÇÃO

$str=stringParaBusca($textoProcurado);
$sql = “SELECT * FROM noticias WHERE noticia REGEXP \”" . $str . “\”";

OBS.:  a grande sacada é a utilização de Sintaxe de Expressões Regulares do MYSQL, para saber mais sobre Expressões regulares acesse http://dev.mysql.com/doc/refman/4.1/pt/regexp.html

Forte abraço.

Manipulando string com PHP parte 2

Funções relacionadas a HTML

htmlspecialchars

string htmlspecialchars(string str);

Devolve a string fornecida, substituindo os seguintes caracteres:

& para ‘&amp;’

” para ‘&quot;’

< para ‘&lt;’

> para ‘&gt;’

htmlentities

string htmlentities(string str);

Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representação especial em html, como por exemplo:

º para ‘&ordm;’

ª para ‘&ordf;’

á para ‘&aacute;’

ç para ‘&ccedil;’

nl2br

string nl2br(string str);

Devolve a string fornecida substituindo todas as quebras de linha (“\n”) por quebras de linhas em html (“<br>”).

Exemplo:

echo nl2br(“Mauricio\nVivas\n”);

Imprime:

Maurício<br>Vivas<br>

get_meta_tags

array get_meta_tags(string ficheiro);

Abre um ficheiro html e percorre o cabeçalho em busca de “meta” tags, Devolvendo num array todos os valores encontrados.

Exemplo:

No ficheiro teste.html temos:

<head>

<meta name=”author” content=”jose”>

<meta name=”tags” content=”php3 documentation”>

</head><!– busca encerra aqui –>

a execução da função:

get_meta_tags(“teste.html”);

Devolve o array:

array(“author”=>”jose”,”tags”=>”php3 documentation”);

strip_tags

string strip_tags(string str);

Devolve a string fornecida, retirando todas as tags html e/ou PHP encontradas.

Exemplo:

strip_tags(‘<a href=”teste1.php3″>testando</a><br>’);

Devolve a string “testando”

urlencode

string urlencode(string str);

Devolve a string fornecida, convertida para o formato urlencode. Esta função é útil para passar variáveis para uma próxima página.

urldecode

string urldecode(string str);

Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal.

Funções relacionadas a arrays

Implode e join

string implode(string separador, array partes);

string join(string separador, array partes);

As duas funções são idênticas. Devolvem uma string contendo todos os elementos do array fornecido separados pela string também fornecida.

Exemplo:

$partes = array(“a”, “casa número”, 13, “é azul”);

$inteiro = join(” “,$partes);

$inteiro passa a conter a string:

“a casa número 13 é azul”

split

array split(string padrao, string str, int [limite]);

Devolve um array contendo partes da string fornecida separadas pelo padrão fornecido, podendo limitar o número de elementos do array.

Exemplo:

$data = “11/14/1975″;

$data_array = split(“/”,$data);

O código acima faz com que a variável $data_array receba o valor:

array(11,14,1975);

explode

array explode(string padrao, string str);

Funciona de maneira bastante semelhante à função split, com a diferença que não é possível estabelecer um limite para o número de elementos do array.

Comparações entre strings

similar_text

int similar_text(string str1, string str2, double [porcentagem]);

Compara as duas strings fornecidas e devolve o número de caracteres coincidentes. Opcionalmente pode ser fornecida uma variável, passada por referência (ver tópico sobre funções), que receberá o valor percentual de igualdade entre as strings. Esta função é case sensitive, ou seja, maiúsculas e minúsculas são tratadas como diferentes.

Exemplo:

$num = similar_text(“teste”, “testando”,&$porc);

As variáveis passam a ter os seguintes valores:

$num == 4; $porc == 61.538461538462

strcasecmp

int strcasecmp(string str1, string str2);

Compara as duas strings e Devolve 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta função é case insensitive, ou seja, maiúsculas e minúsculas são tratadas como iguais.

strcmp

int strcasecmp(string str1, string str2);

Funciona de maneira semelhante à função strcasecmp, com a diferença que esta é case sensitive, ou seja, maiúsculas e minúsculas são tratadas como diferentes.

strstr

string strstr(string str1, string str2);

string strchr(string str1, string str2);

As duas funções são idênticas. Procura a primeira ocorrência de str2 em str1. Se não encontrar, Devolve uma string vazia, e se encontrar Devolve todos os caracteres de str1 a partir desse ponto.

Exemplo:

strstr(“Mauricio Vivas”, “Viv”); // Devolve “Vivas”

stristr

string strstr(string str1, string str2);

Funciona de maneira semelhante à função strstr, com a diferença que esta é case insensitive, ou seja, maiúsculas e minúsculas são tratadas como iguais.

strpos

int strpos(string str1, string str2, int [offset] );

Devolve a posição da primeira ocorrência de str2 em str1, ou zero se não houver. O parâmetro opcional offset determina a partir de qual caracter de str1 será efetuada a busca. Mesmo utilizando o offset, o valor de retorno é referente ao início de str1.

strrpos

int strrpos(string haystack, char needle);

Devolve a posição da última ocorrência de str2 em str1, ou zero se não houver.

Funções para edição de strings

chop

string chop(string str);

Retira espaços e linhas em branco do final da string fornecida.

Exemplo:

chop(” Teste \n \n “); // Devolve ” Teste”

ltrim

string ltrim(string str);

Retira espaços e linhas em branco do final da string fornecida.

Exemplo:

ltrim(” Teste \n \n “); // Devolve “Teste \n \n”

trim

string trim(string str);

Retira espaços e linhas em branco do início e do final da string fornecida.

Exemplo:

trim(” Teste \n \n “); // Devolve “Teste”

strrev

string strrev(string str);

Devolve a string fornecida invertida.

Exemplo:

trrev(“Teste”); // Devolve “etseT”

strtolower

string strtolower(string str);

Devolve a string fornecida com todas as letras minúsculas.

Exemplo:

strtolower(“Teste”); // Devolve “teste”

strtoupper

string strtoupper(string str);

Devolve a string fornecida com todas as letras maiúsculas.

Exemplo:

strtolower(“Teste”); // Devolve “TESTE”

ucfirst

string ucfirst(string str);

Devolve a string fornecida com o primeiro caracter convertido para letra maiúscula.

Exemplo:

ucfirst(“teste de funcao”); // Devolve “Teste de funcao”

ucwords

string ucwords(string str);

Devolve a string fornecida com todas as palavras iniciadas por letras maiúsculas.

Exemplo:

ucwords(“teste de funcao”); // Devolve “Teste De Funcao”
str_replace

string str_replace(string str1, string str2, string str3);

Altera todas as ocorrências de str1 em str3 pela string str2.

Funções diversas

chr

string chr(int ascii);

Devolve o caracter correspondente ao código ASCII fornecido.

ord

int ord(string string);

Devolve o código ASCII correspontente ao caracter fornecido.

echo

echo(string arg1, string [argn]… );

Imprime os argumentos fornecidos.

print

print(string arg);

Imprime o argumento fornecido.

strlen  

int strlen(string str);

Devolve o tamanho da string fornecida.

Fonte http://www.truquesedicas.com/tutoriais/php/apendices/00001a.htm

Colocando o MSN Messenger no seu site / blog

Olá Pessoal,

Pesquisando maneiras de disponibilizar atendimento e suporte on-line de maneira fácil, hoje descobri de maneira fácil a utilizar um gadget para exibir uma caixa de mensagem onde é possível conversar com o seu MSN, permitindo que seu site ofereça o sistema de atendimento e suporte on-line utilizando o seu e-mail do MSN.

Primeiramente, você deve acessar o endereço http://settings.messenger.live.com/applications/WebSettings.aspx

Você estará abrindo uma página de configurações do MSN no live.com, preencha seus dados referente ao seu Windows Live ID.

A próxima página irá exibir uma opção chamada ” Permitir que qualquer pessoa na Web veja a minha presença e me envie mensagens.”. Marque ela e clique em “salvar” na barra acima.

Após salvar suas configurações, clique no menu “Criar HTML” localizado na lateral esquerda.

Nesta página, você poderá escolher a forma como deseja exibir na sua página o Messenger. A primeira opção é justamente a que desejamos, onde será exibida uma caixa que permitirá o seu visitante falar com você.

Lembrando que o seu usuário poderá utilizar seu Windows Live ID próprio ou manda uma mensagem como “Visitante”.

Escolha o tamanho da caixa e cores.

Logo abaixo aparece um campo onde é exibido um código que você deve copiar e colar em seu site.

Pronto, a partir de agora você terá um Windows Live Messenger instalado em seu site e seus visitantes poderão falar com você.

Sucesso, até a próxima dica de como disponibilizar a chamada do Skype no seu site!

Coloque o TWITTER em seu Site/Blog

Coloque um widget do Twitter em seu site ou no seu blog. Basta apenas copiar o código e colar em sua página no lugar desejado, ai todos os posts dos seus seguidores aparecerá automaticamente no seu Site/blog.

Acessem o Link: http://twitter.com/widgets/which_widget

Abraço.

Manipulando string com PHP parte 1

O PHP suporta mais de 100 funções para manipulação de strings, abaixo veremos as funções mais utilizadas no dia a adia.

implode()- converte um array para uma string.

$fruta = array(‘melão’, ‘abacaxi’,'laranja’);
$fruta = implode(‘,’, $fruta);
resultado = ‘melão, abacaxi,laranja’;

explode()- converte uma string para um array

$fruta = ‘melão, abacaxi,laranja’;
$fruta = explode(‘,’, $fruta);
resultado = $fruta[0]=’melão’, $fruta[1]=’abacaxi’, $fruta[2]=’laranja’;

str_word_count() – conta as palavras em uma string;

$frase = ‘PHP é de mais’;
$palavras = str_word_count($frase);
resultado = 3
procure também a função count_char();

strtoupper() – converte uma string para letras em maiúscula

$frase = ‘PHP é de mais’;
$frase =strtoupper($frase);
resultado = PHP É DE MAIS’
procure também  as funções lcword(), strtolower(), ucfirst(), ucword();

stript_tags ()- extrai tags HTML e PHP de uma string

$frase=’<p><font size=”2″>PHP é de mais</font></p>’;
$frase=stript_tags($frase);
resultado = PHP é de mais
Você também pode informar para a função qual as tags que serão removidas
$frase= strip_tags($frase, '<p>');
procure também htmlenteties(),
htmlspecialchar();

str_replace() – substitui todas as ocorrências encontradas

$frase=’Manipulando string com PHP’;
$frase= str_replace(‘Manipulando’, ‘Substituindo’, $frase);
resultado = Substituindo string com PHP
procure também substr_replace(), strireplace(), strtr();

substr() – Substitui parte de uma string especificando o intervalo inicial e final

$frase = ‘Manipulando string com PHP’;
$frase = substr(‘Manipulando string com PHP’,12, strlen(‘Manipulando string com PHP’)) ;
resultado = string com PHP
procure também strrchr();

strlen() – pega o tamnho de uma string.

$frase = ‘PHP é de mais’;
$tam = strlen($frase);
resultado = 14

strcasecmp() – compara duas string de mode case-insensitive

if(strcasecmp(‘string com php’, ‘String com PHP’) == 0)
echo ‘strings são iguais com case-insensitive’

É isso ai, forte abraço a todos os leitores do blog.

leia a segunda parte

http://ericsilva.wordpress.com/2010/11/22/tratamento-de-strings-com-php/

10 grandes mudanças que afetarão o ambiente de trabalho

Gartner elabora lista com as tendências que vão transformar a forma como as empresas atuam e que devem impactar diretamente a TI.

Por Redação da Computerworld

05 de agosto de 2010 – 07h05
 

O mundo do trabalho já sofreu alterações profundas nos últimos 20 anos, graças às tecnologias e à evolução das práticas de gestão. E, de acordo com a consultoria Gartner, mudanças ainda maioires estão por vir nos próximos dez anos, quando questões como a falta de rotina e a hiperconectividade afetarão diretamente o mercado e as empresas.

Para a Gartner, um dos principais pontos de mudança será o fato de que as organizações terão menos rotinas. Até 2015, a consultoria projeta que 40% ou mais das corporações trabalharão dessa forma, contra menos de 25% neste ano. Além disso, as pessoas dependerão cada vez mais do trabalho em equipe, o que exigirá tecnologias que garantam a comunicação e a interação entre as pessoas.

Para ajudar as companhias a prever cenários futuros e se preparar para novos ambientes de trabalho, a Gartner listou as dez grandes mudanças para os próximos anos, que impactarão diretamente na TI.

1 – Valorização do trabalho que depende da interação humana
O principal valor das pessoas estará na capacidade de realizar processos que fujam da rotina. As contribuições humanas que resultem em descobertas e inovações estão incluídas nessa categoria. O foco do uso da tecnologia, nesse caso, deve ser muito bem direcionado para estimular uma integração e interação entre os profissionais para estimular ideias e discussões.

2 – Grupos de trabalho
A Gartner prevê também uma disseminação dos trabalhos em grupo para atacar, de forma rápida, problemas específicos e difícil solução. Segundo a consultoria, esse formato de trabalho será muito mais valorizado e premiado que as ações individuais. Além disso, tende a mudar o atual forma do trabalho em equipe, já que dependerá de pessoas de diversas áreas da organização.

3 – Relacionamento em cadeia
Com a adesão aos modelos de trabalho em grupo, os profissionais têm de lidar melhor com as relações em cadeia. Assim, as pessoas precisam explorar o networking (rede de contatos) para buscar os indivíduos mais adequados para resolver problemas e buscar alternativas. Essa postura é crucial para o sucesso das iniciativas em grupo e para o consequente resultado para os negócios.

4 – Equipes externas
A organização não tem controle sobre alguns grupos informais externos de pessoas que podem ter impacto direto no sucesso ou no fracasso da empresa. Esses grupos estão ligados por interesses comuns, incidentes específicos, entre outras razões. Os executivos mais habilidosos sabem conviver com um ecossistema de negócios fora do controle da companhia, com seu poder de influência. Esse poder depende do entendimento sobre o potencial coletivo e da identificação das pessoas-chave nos grupos informais, já que é fundamental reunir inteligência de marketing por meio desses grupos. Igualmente importante é descobrir como usar os grupos para definir segmentos de mercado, produtos e diversas estratégias de negócios.

5 – Processos informais
As empresas precisam detectar todo tipo de processo que foge da rotina, mas que contribui para a tomada de decisões. Segundo a Gartner, essas ações informais tendem a ganhar cada vez mais força no longo prazo. E a única forma das organizações se prepararem para isso é criar rascunhos com os principais modelos de processos.

6 – Trabalho espontâneo
Outro conceito incluído na descrição do novo ambiente das empresas é o trabalho espontâneo, o qual não depende de processos ou de funções específicas. A consultoria prevê que boa parte dos projetos tende a nascer a partir desse tipo de iniciativa não programada.

7 – Simulação e experimentação
A imersão em ambientes simulados, similares aos que puderam ser visto no filme Minority Report, substituirá a extensa análise de células em planilhas. O ambiente simulado será construído a partir de tecnologias que consigam identificar como reunir elementos baseados na forma como as pessoas interagem com o conteúdo. As pessoas, por sua vez, têm a possibilidade de manipular uma série de parâmetros para reformular o mundo virtual.

8 – Sensibilidade a novos padrões
O mundo dos negócios está ficando mais volátil e já não admite uma postura linear, na qual as experiências passadas baseiam modelos futuros. A tendência é de um mercado cada vez menos previsível, razão pela qual algumas organizações já criam grupos especificamente para detectar padrões emergentes, avaliar essas tendências e desenvolver cenários sobre a influência das grandes mudanças e como explorá-las.

9 – Hiperconectividade
O caráter hiperconectado já está presente na maioria das organizações, que abrangem redes em cima de redes, sobre as quais é difícil manter controle. Com esse cenário, haverá cada vez mais misturas entre relações formais e informais nas relações corporativas, impactando an forma como as pessoas trabalham e na função do departamento de TI, que deve estar preparado para apoiar e aumentar as conexões.

10 – Caem barreiras entre vida profissional e pessoal
O local de trabalho é cada vez mais virtual e os encontros de negócios acontecem entre pessoas que mal se conhecem. Mas o funcionário ainda terá seu local físico de trabalho, mesmo que seja em casa. Com isso, a tendência de muitos é que as linhas que separam vida pessoal, profissional, social e familiar desapareçam. Cada indivíduo precisa gerenciar a complexidade criada por demandas que se sobrepõem. Quem não souber administrar essa situação pode ter o desempenho comprometido, pois acabará se deparando com o excesso de informação.