Registrohost.com e Registrar.br.com

Nos últimos dois meses, milhares de brasileiros têm recebido boletos da empresa Registrar.br.com. Esta empresa picareta envia boletos a donos de domínios .com.br, na tentativa de induzir as pessoas ao erro.

Esses boletos, sendo muito parecidos com os do Registro.br, fazem as pessoas pensarem que se trata da cobrança anual do seu domínio. Com medo de perder o domínio, as pessoas pagam o boleto.

Ou, em outras palavras, são roubadas.

Escrevi um post chamado Registrar.br.com – Golpe do boleto, onde explico este golpe com grande riqueza de detalhes (o que me garantiu até algumas ameaças). Quem não leu, vale a pena conferir.

Leia mais em: http://gustavo.cardial.com.br/registrohost-com-dissecando-mafia-boletos/

Postagens em outra “dimensão”! Agora é oficial!

Galera, bom dia!

Algumas pessoas já conhecem meu blog e sabem que é sempre um prazer estar postando sobre coisas que gosto, coisas que me ajudaram ou curiosidades neste mundo inifinito que é a área de TI. Estou desde já redirecionando os how tos para outro blog afim de centralizar as informações e evitar duplicidade com o Google, Yahoo, CUIL, MSN e outros buscadores famosos.

Quem é o NerdBlog.Info?

Sou eu mesmo, mas 100% focado nas experiências de TI e curiosidades em geral.

Agradeço a todos vocês e afirmo que vou demorar um pouco pra postar algo aqui. (lá o fluxo de how tos será maior)

Abraços.

http://www.nerdblog.info (quase ia me esquecendo)

O que é PL/SQL?

PL/SQL (acrónimo para a expressão inglesa Procedural Language/Structured Query Language) é uma extensão da linguagem padrão SQL para o SGBD Oracle da Oracle Corporation. É uma Linguagem Procedural da Oracle, estendida da SQL.

Permite que a manipulação de dados seja incluída em unidades de programas. Blocos de PL/SQL são passados e processados por uma PL/SQL Engine que pode estar dentro de uma ferramenta Oracle ou do Server. A PL/SQL Engine filtra os comandos SQL e manda individualmente o comando SQL para o SQL Statement Executor no Oracle Server, que processa o PL/SQL com os dados retornados do Server.

É a linguagem básica para criar programas complexos e poderosos, não só no banco de dados, mas também em diversas ferramentas Oracle.

Antes de 1991 a única forma de usar construções procedurais com o SQL era usar PRO*C. Foi onde as instruções SQL do Oracle foram embutidas em código C. O código C era pré-compilado para converter as instruções SQL em chamadas de bibliotecas.

Em 1991 o PL/SQL 1.0 foi lançado com o Oracle Versão 6.0. Ele era muito limitado nas suas capacidades.

Já a versão 2.0 era uma atualização maior, que suportava stored packages, procedures, funções, tabelas PL/SQL, registros definidos pelo programador e package extensions. Esta versão foi lançada com o Oracle Versão 7.0.

O PL/SQL Versão 2.1 foi liberado com a Versão 7.1 do Oracle. Isto permitiu o uso de stored functions dentro de instruções SQL e a criação de SQL dinâmico pelo uso do pacote DBMS_SQL. Foi também possível executar instruções de Linguagens de Definição de Dados de programas PL/SQL.

A Versão 2.2 PL/SQL foi lançada com a Versão 7.2 do Oracle. Ele implementava uma proteção do código para programas PL/SQL e também o agendamento de trabalhos do banco de dados com o pacote DBMS_JOB.

A Versão 2.3 do PL/SQL foi lançado com a Versão 7.3 do Oracle. Esta versão aumentou as capacidades das tabelas PL/SQL e adicionou funcionalidades de E/S de arquivos.

A Versão 2.4 do PL/SQL foi liberada com a Versão 8.0 do Oracle. Esta versão suporta os melhoramentos do Oracle 8, incluindo Large Objects, projeto orientado a objetos, tabelas aninhadas e Oracle advanced queuing.

[editar] Estrutura Básica do PL/SQL

A unidade básica em PL/SQL é um bloco. Todos os programas em PL/SQL são compostos por blocos, que podem estar localizados uns dentro dos outros. Geralmente, cada bloco efetua uma ação lógica no programa. Um bloco tem basicamente a seguinte estrutura:

DECLARE

Seção para declaração de variáveis,tipos e subprogramas locais.

BEGIN

Seção Executável, nesta seção ficam as instruções procedurais e SQL. Esta é a única seção do bloco que é indispensável e obrigatória.

EXCEPTION

Seção/Setor onde ficam as instruções de tratamento de erro.

END

Fonte: http://pt.wikipedia.org/wiki/PL/SQL

Evento Mineiro de Software Livre, TÔ DENTRO!

Boa tarde Galera, para quem curte eventos sobre Software Livre e Open Source chegou a hora de participar de um evento bacana que está vindo por aí, e o melhor, 100% gratuito. Linux, PHP, Python e Muito Opensource para quem gosta de software livre!

Fonte: http://www.nerdblog.info/2009/09/10/primeiro-festival-de-software-livre-de-bh/

Unable to remove file /httpdocs/minha_pasta: Sharing violation erro ao tentar remover diretório

Error: Unable to remove file /httpdocs/minha_pasta: Sharing violation

Se isto ocorre com você é porque o IIS está com algum processo acessando arquivos ou pastas neste diretório, para isto não ocorrer em uma nova tentativa de remoção você pode fazer 2 coisas abaixo:

Pelo gerenciador de processos finalizar o processo que está acessando este diretório,
Pelo Administrador do IIS você pode reiniciar o iis e o problema será sanado.

Erro 111 na tentativa de envio de webmail pelo cpanel

Se você tenta acessar sua conta de email (e até consegue) via webmail (em seu cpanel), mas na hora de enviar uma mensagem o erro que aparece é o erro 111, NADA DE PÂNICO, mister little lhe dá a resposta bem mastigadinha!

1 – acesse o servidor, logando-se como root execute o comando abaixo:

/scripts/mailperm –force

Este problema ocorre (normalmente) ou porque a conta de email Não exise mais ou porque a mesma perdeu privilégios no gestor do exim.

Abraços!

Parallels Plesk Windows: Domínio não funciona o DNS, já tentei restore dns zone, já tentei renomear -> SOLUÇÃO AQUI!

Essa dica é bem quentinha e gostosa!

Sintomas:

Registro.br não mostra autoridade sobre o domínio ou dá falha de dns,
Já tentei restaurar a zona de dns do zero, já inseri manualmente a zona de dns do domínio, já renomeei o domínio do cliente e retornei ao original e até mesmo mudei o ip do domínio do cliente e voltei o que era antes e NADA!

Galera, nada de pânico! Mr little está lhe passando mastigadinho e gostoso, para sair dessa tranqueira entre no remote desktop de seu servidor Windows, cujo server opera o plesk 9.x (essa dica rola para o 8.x, mas aplico no 9.x):

Abra o MS-DOS, e dentro dele digite:

cd C:\Program Files\Parallels\Plesk\admin\bin

Nesta hora você estará nos binários de administração do plesk, mas antes copie o banco de dados PSA do plesk para uma área segura, ele está em:

C:\Program Files\Parallels\Plesk\admin\db\psa.mdb (psa.mdb é o nome do bandido!)

Rode o seguinte comando na pasta bin que chegamos via DOS:

dbclient.exe –direct-sql –sql=”select * from dns_zone where name like ‘domíniolascado.com.br’

Isso vai lhe retornar (no primeiro valor numérico) o ID do domínio, anote-o em um lugar ULTRA seguro!

Agora rode o comando abaixo:

dbclient.exe –direct-sql –sql=”delete from dns_zone where id=777″ (777 NÃO é o número obrigatório MEU, este número é o ID que falei acima, pode ser qualquer número inteiro positivo).

Após, vamos ajustar as coisas:

dbclient.exe –direct-sql –sql=”update dns_zone set status=0 where id=777″ (777 NÃO é o número obrigatório MEU, este número é o ID que falei acima, pode ser qualquer número inteiro positivo).

E por fim:

dnsmng.exe update *

Caso dê certo, please, EU QUERO UMA CAIXA DE BIS do preto!

Abraços!

7 coisas ultra simples de se fazer com php!

É comum ver scripts com dezenas de linhas de código pra fazer algo extremamente simples. Fica aqui meu apelo desesperado com algumas dicas rápidas.

1 – Listar arquivos de um diretório

Se não houver um motivo muito claro pra usar opendir, readdir e closedir (não consigo pensar em nenhum), a forma mais prática de listar o conteúdo de um diretório é com DirectoryIterator:
$iterator = new DirectoryIterator(‘/var/www’);

foreach ( $iterator as $entry ) {
echo $entry->getFilename(), “\n”;
}

Se for necessário listar os arquivos recursivamente, percorrendo todos os subdiretórios, é só usar o RecursiveDirectoryIterator junto com o RecursiveIteratorIterator:
$iterator = new RecursiveDirectoryIterator(‘/var/www’);
$recursiveIterator = new RecursiveIteratorIterator($iterator);

foreach ( $recursiveIterator as $entry ) {
echo $entry->getFilename(), “\n”;
}

Com um pouco de criatividade, é possível estender essas classes com qualquer lógica facilmente, como por exemplo, para montar uma árvore com a estrutura dos diretórios.
2 – montar e desmontar query strings

Mesmo que menos comum (e menos útil), colocar uma query string numa URL é um trabalho trivial demais pra ser feito com implode, concatenando tudo ou qualquer outro método engenhoso. Desde o lançamento do PHP 5 é possível contar com a http_build_query:
$dados = array(
‘hl’ => ‘pt-BR’,
‘q’ => ‘Forgetting Sarah Marshall’,
‘testa-escape’ => ‘acentuação’,
);

echo http_build_query($dados);
// hl=pt-BR&q=Forgetting+Sarah+Marshall&testa-escape=acentua%C3%A7%C3%A3o

E o inverso também é possível com as funções parse_url e parse_str:
$url = parse_url(‘http://www.google.com/search?q=anneke+van+giersbergen&num=50′);

parse_str($url['query'], $query);

echo $query['q'];
// anneke van giersbergen

Só fique atento que, por motivos alheios ao bom senso, parse_str por padrão extrai as variáveis no escopo onde foi chamada. É necessário passar um segundo argumento para ter um array gerado por referência, como no exemplo acima com a variável $query.
3 – ler páginas remotas

Dentre todas as implementações, a mais desnecessária costuma ser fsockopen, fwrite, feof, fgets e fclose para ler arquivos remotos por HTTP.

Uma função já resolve:
$contents = file_get_contents(‘http://php.net/file_get_contents’);

Isso é possível graças aos protocol wrappers que encapsulam a lógica de acesso aos respectivos protocolos, tal como HTTP. Esta forma de acesso, no entanto, depende da configuração allow_url_fopen estar habilitada no php.ini (que é o padrão).

Para ler os response headers da requisição, utilize fopen com stream_get_meta_data.

E se um dia você quiser impressionar a mulherada, veja a função stream_wrapper_register para criar o seu próprio protocol wrapper.
4 – submeter dados por post para uma página remota

A coisa fica mais complicada quando o desenvolvedor pensa em usar cURL pra submeter dados por POST para outro servidor. A extensão até tem seu mérito, mas usá-la apenas pra este propósito é um grande equívoco.

As funções que fazem uso dos protocol wrappers aceitam um objeto de stream context, criado pela função stream_context_create, para configurar alguns aspectos do protocolo. As opções de contexto do protocolo HTTP permitem definir, entre outras coisas, o método de acesso (GET, POST, etc) e o conteúdo a ser postado:
$content = http_build_query(array(
‘cidade’ => ‘Rio de Janeiro’,
‘tipo’ => ‘Apartamento’,
));

$context = stream_context_create(array(
‘http’ => array(
‘method’ => ‘POST’,
‘content’ => $content,
)
));

$contents = file_get_contents(‘http://exemplo/teste.php’, null, $context);

Quando não for necessário ler o retorno da requisição, basta chamar a url com fopen passando o contexto como quarto argumento.
5 – fazer download de um arquivo remoto

Vale lembrar que a maioria das funções de stream e filesystem aceitam URLs completas e fazem uso da abstração do protocolo. O que eu vejo muita gente esquecer é que isso inclui a função copy:
$url = “http://userserve-ak.last.fm/serve/500/4349551/Terri+Clark.jpg”;

copy($url, ‘/tmp/’ . urldecode(basename($url)));

O trecho acima vai baixar a imagem remota e salvar no arquivo local /tmp/Terri Clark.jpg. E caso não seja óbvio, “local” se refere a quem está executando o script PHP, que no caso será o seu servidor caso seja um script web, e não o cliente que está acessando pelo browser.

Se o objetivo for realmente repassar o conteúdo remoto para o cliente que estiver acessando pelo browser, o script é igualmente simples:
$url = ‘http://userserve-ak.last.fm/serve/500/4349551/Terri+Clark.jpg’;

$handle = fopen($url, ‘r’);

$meta_data = stream_get_meta_data($handle);

// Repassa todos os headers do servidor remoto para o nosso cliente
foreach ( $meta_data['wrapper_data'] as $header ) {
header($header);
}

// Repassa o conteúdo para o nosso cliente
fpassthru($handle);

Considerando que estamos apenas testando a funcionalidade. Ter um script de proxy totalmente funcional é bem mais complexo, e certamente já tem algo pronto por aí.
6 – fazer cálculo com data

Dentre todas as simplificações possíveis, a que mais costuma comover é a função strtotime. Pra quem já está acostumado, parece que não faz mais do que sua obrigação. Mas pra quem ainda faz cálculos com data multiplicando por 86400, chega a parecer mágico:
echo ‘Amanhã: ‘, strftime(‘%A’, strtotime(‘tomorrow’));
// Amanhã: domingo

echo ‘Próxima segunda: ‘, strftime(‘%d de %B de %Y’, strtotime(‘next monday’));
// Próxima segunda: 01 de junho de 2009

echo ‘Vencimento: ‘, strftime(‘%d/%m/%Y’, strtotime(‘+3 months’));
// Vencimento: 30/08/2009

Mais exemplos você mesmo pode ver no manual do PHP ou na página de Date Input Formats do projeto GNU. Para o nome dos meses e dias da semana ficarem em português, utilize setlocale(LC_TIME, ‘pt_BR’); antes de chamar a função strftime.
7 – escapar sql e html

Felizmente nunca mais vi nenhum script com aberrações anti-sql-injection, mas há algum tempo era possível encontrar pessoas removendo palavras-chave de SQL de todas as strings que íam para o banco de dados. Se o usuário digitasse palavras como select, delete ou drop, elas eram simplesmente removidas da frase. Isso quando o programador não interrompia o script e acusava o usuário de estar tentando explorar alguma falha de segurança. Eu juro, isso existia.

Ao trabalhar com PDO, a melhor opção (pra não dizer a única!) é utilizar prepare e execute pra separar a query em si dos seus parâmetros:
$conexao = new PDO(‘mysql:dbname=banco;host=localhost’, ‘login’, ‘senha’);

$uf = ‘RJ’;
$idade = 18;

$sth = $conexao->prepare(‘SELECT nome FROM pessoa WHERE uf = ? AND idade > ?’);

$sth->execute(array($uf, $idade));

while ( $row = $sth->fetch() ) {
echo $row['nome'];
}

Se estiver utilizando drivers nativos, veja as funções mysql_real_escape_string ou mysqli_prepare e mysqli_stmt_bind_param, dependendo da extensão. Certamente outros bancos de dados têm a mesma funcionalidade.

A única preocupação é garantir que os parâmetros não se misturem com a query; não precisa inventar moda e remover o que o usuário digitou.

Outra confusão comum é ao escapar HTML. O objetivo é evitar que o texto digitado por um usuário seja interpretado pelo browser de todos os usuários do site.

Conceitualmente, esta é uma responsabilidade da camada de exibição. O template é que deve utilizar htmlspecialchars antes de gerar a saída na tela, e não antes de salvar no banco. Isso garante que o conteúdo que está no banco é fiel ao que foi digitado pelo usuário e pode ser reaproveitado em outras mídias além do HTML.

O que pode e deve ser feito é filtrar conteúdo realmente indevido, como caracteres inválidos ou espaços extras, dependendo da aplicação.

FONTE: http://garotosopa.wordpress.com/2009/05/30/7-coisas-simples-em-php-que-alguns-ainda-complicam/