Posts Tagged ‘Open Source’

Acompanhe o ENSOL pelo Streaming gigahost :D

Friday, May 7th, 2010

ENSOL IV

Pessoal, para quem está longe como eu vale a pena acompanhar o ENSOL.
A Qualidade do streaming tá bacana (conexão aqui de 1mb compartilhada).
Para profissionais com afinidade no globo de software livre vale a pena acompanhar.

Vide: http://ensol.gigahost.com.br/

Software livre: Necessidade ou Xiitismo?

Friday, March 27th, 2009

É muito comum ver pessoas criticando o software livre ou mesmo elogiando sem entender seu impacto no mundo comercial.

Vamos falar um pouco da realidade do Software Livre em um foco totalmente comercial para que as pessoas entendam a real necessidade desta metodologia/visão de negócio e também possam aplicar em suas vidas esta estratégia. (mais à frente explicarei o porquê de estratégia)

Em primeiro passo devemos fixar em nossas mentes que Software Livre NÃO é software gratuito, isto mesmo, o fato de você ter usado uma ferramenta de código-fonte aberto e se beneficiado da gratuidade deste utilitário não quer dizer que as pessoas não tirem proveitos financeiros sobre tal metodologia/visão.

Abaixo vou citar alguns casos aonde se extrai muito dinheiro do software livre.

Dentro deste seguimento prestemos atenção em um dos mais populares fenômenos do Software Livre, o Gnu/Linux e seus sabores.

Temos no mercado corporativo do pingüim 3 distribuições em especial que se destacam pela sua aceitação de mercado, estabilidade e suporte de alta qualidade:

* Red Hat
* Suse Enterprise
* Mandriva

As três distribuições acima citadas COBRAM pelo suporte e acesso a repositórios comerciais.

Em algum instante você pode estar se perguntando:
Isto é maquiavélico, por que eles cobram por Gnu/Linux se ele é gratuito?

Mentira! Gnu/Linux é um sistema de código-fonte aberto, mas isto não quer dizer que todos têm sua disponibilidade ou licença gratuitos.

Explique-me como manter um suporte via fone, helpdesk e ter servidores ligados 24 horas, com alta disponibilidade de rede e software?
Quem pagará as contas de luz, água e internet?

Quem pagará os desenvolvedores?

Vejamos outro caso de sucesso – Ubuntu. Sistema amigável, Gnu/Linux, grátis para uso, porém, o suporte cobra para impor seu know how e ajustar sua plataforma, mas pergunto, isto é maquiavélico?

Não, muito pelo contrário, é uma forma de manter o negócio das pessoas bem estruturado e reter lucratividade para empresa. (isto resulta em contratações de desenvolvedores mais experientes e equipamentos mais sofisticados para que sejam testados os softwares com mais stress)

Saindo do globo do pingüim, voltemos à situação do software livre como alternativa as empresas, como sua empresa ou sua casa, até mesmo seu escritório poderiam beneficiar-se de uma metodologia tão forte, melhor dizendo, uma tendência tão evidente e aplicável a qualquer mercado?

Simples, vamos analisar um caso bastante comum nas empresas e entender o porquê do Software Livre ser tão necessário para uma implementação.

Há meses presto consultoria em uma empresa mineira, tendo a mesma uma utilização software proprietário (isto não quer dizer Microsoft, mas qualquer código fechado é de propriedade do desenvolvedor) em alta escala. Até aí as coisas transcorriam de vento em polpa, entretanto, como nem tudo tende a ser um mar de rosas sem espinhos, houve a necessidade de implementação de uma simples funcionalidade no software que a empresa usa para gestão de seus negócios, o que aconteceu?
Houve um investimento de R$ 1000 (mil reais) para implementação de um campo.
Havendo 2 programadores na empresa (um programando em VB e outro em PHP), por que tal campo não foi implementado sem custos?
A resposta é clara, AONDE estava o código-fonte? Ele estava aberto? Quem diabos o fechou?

Pois é amigo, nesta hora as coisas começam a fazer sentido, e para piorar, o software utiliza cliente como sendo pontos de acesso, fazendo consultas infinitas no banco de dados, com resultados pesadíssimos, o que gera gargalo na rede, mesmo sabendo que um front-end no servidor resolveria tudo, visto que somente ele processaria toda a demanda, e o melhor, somente ele precisaria de alta capacidade de armazenamento e processamento, assim como evitar que cada terminal cliente não estivesse obrigado a utilizar-se de um Sistema Operacional Windows, visto que o mesmo tem custos e as bibliotecas da ferramenta comercial só operam nele.

Em cálculos mais claros, vamos analisar custo de licença e vantagens comerciais:

Se cada licença Windows XP Profissional custa R$ 250 (duzentos e cinqüenta reais), preço este sob compra em maior escala, e se a instituição possui 14 computadores nós temos 14 x R$ 250 = R$ 3500 (três mil e quinhentos reais). Cada hardware deve suportar Windows XP e os requisitos mínimos do software que não utiliza conceitos de mercado de TI do século XXI, ou seja, se cada máquina custa R$ 590 (sem monitor, é claro) nós temos R$ 8260 (oito mil duzentos e sessenta reais), então concluímos que o total gasto pela empresa para rodar a aplicação e estar provida dos recursos que a mesma disponibilizava foi de R$ 11760 (onze mil setecentos e sessenta reais) + custo de desenvolvimento e implementação da plataforma proprietária.

Vamos levar este foco agora para o Software Livre e ver o quanto as coisas começam a ficar claras:

Como o software utiliza-se de browser (nem tudo, por que os desenvolvedores podem usar linguagens como C, C++ ou Java) podendo ter sido feito até mesmo em Java (Java desktop) nós cortaríamos gastos com o sistema operacional, visto que não depende de sistema operacional para trabalhar, ou seja, abateremos (pelo menos) R$ 3500 (três mil e quinhentos reais) e o processamento (em caso de browser) é centralizado no servidor, o que faria com que máquinas de baixo processamento fossem utilizadas (sabe aqueles k6-II- 500 mhz parados aí na sua empresa?).

No caso acima, compilando e devolvendo o fonte principal ao cliente, é claro.(em caso caso de linguagens que necessitam de compiladores)

De posse de simples afirmações citadas não tenha medo de focar-se em Gnu/Linux e em Software Livre, por que com SL nós temos a possibilidade de analisar o fonte e mudar as coisas ao nosso estilo, seguindo as necessidades triviais de nossa empresa sem qualquer falta de qualidade, escalabilidade ou dificuldade na manutenção.

Quanto a utilizar-se de Gnu/Linux em sua empresa, faça isto por amar sue negócio, use Gnu/Linux para economizar em seu negócio.

Se às pessoas vierem justificando a não utilização por falta de recursos como impressão, rede e etc, fique certo de que a plataforma Gnu/Linux tem suporte as mais variadas impressoras que o mercado disponibiliza, tem suporte pesado a redes (servidores de dns, logon, ldap – que te dão a mesma autonomia de unidades organizacionais do Windows Server, assim como suporte dhcp, compartilhamento de arquivos e bancos de dados).

Em outras palavras, utilizar-se de Windows para facilidades já não é um argumento válido. Programar soluções proprietárias é outra afirmação equivocada, quer saber por quê?

1 – Software de código-fonte aberto permite uma interação mútua no suporte, ocorrendo de maneira mais simples,

2 – Software aberto permite que qualquer pessoa, inclusive o dono da empresa saibam o que realmente o código faz no back-end, (em background)

3 – Software aberto permite manutenção mais abrangente e update de software com mais qualidade,

4 – Software aberto permite que o código seja visto por qualquer desenvolvedor, o que dá mais amplitude na aplicação de técnicas mais maduras e sofisticadas.

Então, ainda vai ficar no mundo “Redmond”?

Lá em cima afirmei como estratégia o software livre, pois bem, pergunte ao Obama o que ele acha disto, visto que tornou tal metodologia como sendo padrão no desenvolvimento de aplicações para o governo (escolas, hospitais e etc).

Abraços a todos.

Tutorial de segurança em aplicações PHP (parte 1)

Sunday, February 22nd, 2009

Estou anotando algumas dicas para aumentar a segurança em aplicações php (linguagem a qual programo).
Abaixo irei colocar algumas dicas sobre o que tenho aprendido, mas infelizmente de maneira resumida, definida como parte 1:

-alertas de erro -> Desabilitado (coisas como error_reporting(E_ALL);) – isto só pode ocorrer em um sistema no momento de testing.
-register_globals -> Desabilitado
-permissão ->dar o mínimo de privilégios possível no sistema, a nível
de bd e etc.
-variáveis ->setar vazios antes de atribuir strings.

Ex:

<?php

$busca = ”;

if (isset($_GET['busca']))

{

$busca = $_GET['busca'];

}

?>
- usar ssl para dados importantes, evitando exposição de dados.
- Forçar a segurança de maneira que não pese ao usuário,
se possível transparente. Ex: solicitar autenticação por medida de segurança para um transação importante de um cliente já autenticado no sistema.

- tomar sempre cuidado no ato de detecção de ataques, isso pode impedir a usabilidade do sistema.
- cuidados com interações em sistemas remotos (rss, apis remotas – web services).
- filtrar bem os dados (todos) que entram, para não operar com dados
maliciosos.

Filtrar dados é ler o que se entra por $ _GET e $ _POST e observar o que está malicioso e distinguir isto. (bem fácil de filtrar, ruim é identificar a origem)

Todas entradas têm de vir de uma fonte remota, se você não conhece as entradas, não pode se defender delas.

Entradas como $_SERVER exigem muito mais trabalho na hora da filtragem.
- A pior forma de filtrar é tentar manipular ao invés de tratar que o que é limpo é limpo e o que é sujo é sujo, do contrário, tentar manipular as informações poderá criar brechas.
Trecho que reforça a segurança quando um atacante tenta retroceder 1 diretório (ou mais):

<?php

$nomefile = $_POST['nomefile'];

while (strpos($_POST['nomefile'], ‘..’) !== FALSE)
{
$nomefile = str_replace(‘..’, ‘.’, $nomefile);
}

?>

Evidentemente, o basename() função pode substituir toda esta técnica e é uma maneira segura de atingir o objectivo pretendido. O ponto importante é que qualquer tentativa de corrigir Dados inválidos podem conter um erro e permitir a passagem de dados inválidos. Inspeção é uma alternativa muito mais seguro.

INSPECIONAR É MELHOR QUE CORRIGIR, quando se tenta corrigir geralmente se abre uma falha, o que é a real necessidade do atacante.

Se você consegue identificar com precisão e fidelidade a entrada dos dados você já fez quase tudo.
Após, o passo seguinte é criar um filtro fiel para distinguir dados ruins de dados bons.

sempre que for tratar dados o bom é criar um array vazio e atribuir dados a ele, que você realmente sabe que estão limpos.

<?php
$limpo = array( );
switch($_POST['cor']) {
case ‘vermelho’:
case ‘verde’:
case ‘azul’:
$limpo['cor'] = $_POST['cor'];
break;
}
?>

Estamos garantindo mais segurança por que a cor só pode ser uma das três e nada mais, neste caso!

você pode querer afirmar que um usuário só pode conter caracteres alfanuméricos:

<? php

$limpo = array ();

if (ctype_alnum ($ _POST [ 'user']))
(
$limpo[ 'user'] = $ _POST [ 'user'];
)

?>

Procure sempre usar funções nativas do php para segurança, isto pode lhe prevenir de problemas como erro de lógica, resultando assim em uma
brecha de segurança (o que um atacante necessita).

Para ajudar na segurança nos devemos:

Identificar saída,

Escapar saída,

Distinção entre escapara e não escapar dados .

É importante para escapar apenas dados filtrados. Embora escapar sozinho pode evitar muitas das vulnerabilidades de segurança, não deve nunca ser considerado como um substituto para a filtragem de entrada. Dados maliciosos devem ser filtrados primeiro e depois escapados.

Filtrar as entradas com htmlentities é melhor que htmlspecialchars, mas ambas são boas para converter o que vem da web, um exemplo legal é este aqui:

<?php
$htm = array( );
$htm['user'] = htmlentities($limpo['user'], ENT_QUOTES, ‘UTF-8′);
echo “<p>Olá, {$htm['user']}.</p>”; ?>

Isso garante a entrada de dados do user, e de tabela quebra a forma em que os dados vêm de maneira a traduzir caracteres “malucos” em html.

Devemos escapar todos os dados SIM, isto ajuda na segurança de sua aplicação.
htmlentities não converte caracteres alfanuméricos, mas previne que dados estranhos operem em interação do usuário com o sistema.

Outra política, voltando-se ao famoso e muito utilizado mysql é usar funções nativas para escapar entradas de dados para o banco de dados.
Usamos a função mysql_real_escape_string ().
Podemos usar também addslashes para ajudar na relação com o mysql, mas em última instância.

<?php $mysql = array( );

$mysql['username'] = mysql_real_escape_string($clean['username']);

$sql = “SELECT * FROM profile WHERE username = ‘{$mysql['username']}’”; $result = mysql_query($sql); ?>

Fonte -> http://phpsecurity.org/