terça-feira, 20 de julho de 2010
Tutotial para instalar o PHP 5.x no Mandriva, esse funciona e é simples
http://dan.drydog.com/apache2php.html
segunda-feira, 5 de julho de 2010
Redmine com Postgresql no Mandriva
Se houver problemas com o postgres ao gerar as tabelas no schema do redmine execute o seginte comando:
# gem install postgres-pr
# gem install postgres-pr
quarta-feira, 23 de junho de 2010
Injeção de SQL
Injeção de SQL é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com base de dados via SQL. O ataque ocorre quando se consegue inserir uma série de instruções SQL dentro de uma consulta através da manipulação das entradas de dados de uma aplicação.
Para entender o funcionamento consideremos a instrução SQL sequinte:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS;
Esta instrução retorna todos os registros da tabela usuários de um sistema. A partir desta mesma instrução os registros a serem retornados podem ser restritos através da inclusão da clausula WHERE, por exemplo:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “ADMIN” AND SENHA = “12345”;
Se a aplicação não tratar apropriadamente o conteúdo inserido pelo usuário ela poderá gerar uma entrada indesejada e retornar informações que não deveriam ser expostas. É comum aplicações criadas com PHP que com frequencia tem suas instruções SQL criadas através das variáveis que compõem os parametros recebidos por um script-server-side oferecerem maior vulnerabilidade para este tipo de ataque. O código, em PHP, a seguir ilustra uma possibilidade de ataque:
1. 2. $usuario = $_POST['usuario'];
3. $senha = $_POST['senha'];
4.
5. $query_string = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = '{$usuario}'
AND SENHA = '{$senha}';
6. ?>
Com a entrada de dados abaixo é possivél ter como retorno todos os registro da tabela.
Essa entrada faz com que a aplicação gere o sequinte código:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “” AND SENHA = “” or 1 = 1;
Através desse tipo de falha os estragos podem ser muito maiores pois basta inserir no campo senha do formulário de login ; DROP TABLE USUARIOS --, essa instrução irá gerar código a seguir:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “” AND SENHA = “”; DROP TABLE USUARIOS --;
Neste caso as intruções seram executada pelo banco de dados sem nenhum problema pois não possuem erros de sintaxe. O primeiro “;” encerra a primeira instrução e possibilitará a execução da instrução que apaga a tabela de usuários.
Em Java ou qualquer linguagem de programação, ao acessar a base de dados, se as instruções SQL forem concatenadas como a consulta em PHP acima o resultado será o mesmo. Por exemplo:
{
...
conn = pool.getConnection( );
String sql = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = '” + usuario + “'
AND SENHA = '” +senha + ”'”;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
...
}
Como estratégia de defeza, para se prevenir de injeção de SQL, recomenda-se que todas as consultas sejam parametrizadas, nunca deve-se concaternar strings para criar instruções SQL.
{
...
String nome_usuario = request.getParameter("usuario");
String senha_usuario = request.getParameter("senha");
conn = pool.getConnection( );
String sql = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = ?
AND SENHA = ?”;
PreparedStatement pstmt = connection.prepareStatement( sql );
pstmt.setString( 1, nome_usuario);
pstmt.setString( 2, senha_usuario);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
...
}
Essa é uma das estratégias para nos previnirmos deste tipo de ataque, como enunciado no conceito de injeção de sql ela se utiliza de falhas nos sistemas que acessam base da dados. Visto isso o que pode ser feito é criar aplicativos seguindo as especificações de segurança necessárias para evitar esse tipo de ataque.
BIBLIOGRAFIA
http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL
[11h01 23/06/2010]
http://www.totalsecurity.com.br/article.php?sid=732
[00h23 23/06/2010]
http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java
[01h56 24/06/2010]
Injeção de SQL é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com base de dados via SQL. O ataque ocorre quando se consegue inserir uma série de instruções SQL dentro de uma consulta através da manipulação das entradas de dados de uma aplicação.
Para entender o funcionamento consideremos a instrução SQL sequinte:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS;
Esta instrução retorna todos os registros da tabela usuários de um sistema. A partir desta mesma instrução os registros a serem retornados podem ser restritos através da inclusão da clausula WHERE, por exemplo:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “ADMIN” AND SENHA = “12345”;
Se a aplicação não tratar apropriadamente o conteúdo inserido pelo usuário ela poderá gerar uma entrada indesejada e retornar informações que não deveriam ser expostas. É comum aplicações criadas com PHP que com frequencia tem suas instruções SQL criadas através das variáveis que compõem os parametros recebidos por um script-server-side oferecerem maior vulnerabilidade para este tipo de ataque. O código, em PHP, a seguir ilustra uma possibilidade de ataque:
1. 2. $usuario = $_POST['usuario'];
3. $senha = $_POST['senha'];
4.
5. $query_string = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = '{$usuario}'
AND SENHA = '{$senha}';
6. ?>
Com a entrada de dados abaixo é possivél ter como retorno todos os registro da tabela.
Essa entrada faz com que a aplicação gere o sequinte código:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “” AND SENHA = “” or 1 = 1;
Através desse tipo de falha os estragos podem ser muito maiores pois basta inserir no campo senha do formulário de login ; DROP TABLE USUARIOS --, essa instrução irá gerar código a seguir:
SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = “” AND SENHA = “”; DROP TABLE USUARIOS --;
Neste caso as intruções seram executada pelo banco de dados sem nenhum problema pois não possuem erros de sintaxe. O primeiro “;” encerra a primeira instrução e possibilitará a execução da instrução que apaga a tabela de usuários.
Em Java ou qualquer linguagem de programação, ao acessar a base de dados, se as instruções SQL forem concatenadas como a consulta em PHP acima o resultado será o mesmo. Por exemplo:
{
...
conn = pool.getConnection( );
String sql = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = '” + usuario + “'
AND SENHA = '” +senha + ”'”;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
...
}
Como estratégia de defeza, para se prevenir de injeção de SQL, recomenda-se que todas as consultas sejam parametrizadas, nunca deve-se concaternar strings para criar instruções SQL.
{
...
String nome_usuario = request.getParameter("usuario");
String senha_usuario = request.getParameter("senha");
conn = pool.getConnection( );
String sql = “SELECT ID, LOGIN, SENHA, EMAIL
FROM USUARIOS
WHERE LOGIN = ?
AND SENHA = ?”;
PreparedStatement pstmt = connection.prepareStatement( sql );
pstmt.setString( 1, nome_usuario);
pstmt.setString( 2, senha_usuario);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
...
}
Essa é uma das estratégias para nos previnirmos deste tipo de ataque, como enunciado no conceito de injeção de sql ela se utiliza de falhas nos sistemas que acessam base da dados. Visto isso o que pode ser feito é criar aplicativos seguindo as especificações de segurança necessárias para evitar esse tipo de ataque.
BIBLIOGRAFIA
http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL
[11h01 23/06/2010]
http://www.totalsecurity.com.br/article.php?sid=732
[00h23 23/06/2010]
http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java
[01h56 24/06/2010]
quinta-feira, 25 de março de 2010
Como recuperar a senha do root do MySQL
Esse aqui eu já usei e funcionou no Linux Mandriva
http://www.vivaolinux.com.br/dica/Recuperar-senha-de-root-do-MySQL
http://www.vivaolinux.com.br/dica/Recuperar-senha-de-root-do-MySQL
terça-feira, 9 de março de 2010
Como descompactar arquivos no LINUX
Para descompactar estes formatos de arquivos os comandos são simples:
zip:
gunzip nomedoarquivo.zip
rar:
unrar x nomedoarquivo.rar
tar:
tar -xvf nomedoarquivo.tar
tar.gz:
tar -vzxf nomedoarquivo.tar.gz
bz2:
bunzip nomedoarquivo.bz2
tar.bz2:
tar -jxvf nomedoarquivo.tar.bz2
zip:
gunzip nomedoarquivo.zip
rar:
unrar x nomedoarquivo.rar
tar:
tar -xvf nomedoarquivo.tar
tar.gz:
tar -vzxf nomedoarquivo.tar.gz
bz2:
bunzip nomedoarquivo.bz2
tar.bz2:
tar -jxvf nomedoarquivo.tar.bz2
quinta-feira, 24 de setembro de 2009
Verificar o tamanho do DB
Esta consulta tras o tamnho do DB, esparço usado e livre.
select round(sum(used.bytes) / 1024 / 1024 / 1024) || ' GB' "Database Size",
round(sum(used.bytes) / 1024 / 1024 / 1024) -
round(free.p / 1024 / 1024 / 1024) || ' GB' "Used space",
round(free.p / 1024 / 1024 / 1024) || ' GB' "Free space"
from (select bytes
from v$datafile
union all
select bytes
from v$tempfile
union all
select bytes from v$log) used,
(select sum(bytes) as p from dba_free_space) free
group by free.p
segunda-feira, 17 de agosto de 2009
Como usar o Crystal Reports XI como o Delphi 2009
Primeiro instale o componente Crystal ActiveX Report View Library 11.0 através da opção Import Component do menu Component





Será acrescentada a paleta Crystal na barra de componentes como segue.
Executando um relatório .crp a partir de uma aplicação.
Em uma nova aplicação acrescente um botão a um formulário e no seu evento de clique adicione o seguinte código:
Espero ter colaborado com esse exemplo. Qualquer dúvida sobre o assunto pode enviá-las que se eu souber eu as repoderei.
Primeiro instale o componente Crystal ActiveX Report View Library 11.0 através da opção Import Component do menu Component





Será acrescentada a paleta Crystal na barra de componentes como segue.
Executando um relatório .crp a partir de uma aplicação.
Em uma nova aplicação acrescente um botão a um formulário e no seu evento de clique adicione o seguinte código:
Uses OleCtrls, CrystalActiveXReportViewerLib11_TLB;
…
procedure TForm1.Button2Click(Sender: TObject);
var
cry: TCrystalActiveXReportViewer;
oRpt, oApp: variant;
i: integer;
frm: TForm;
begin
// criação do objeto e identificação do arquivo .rpt a ser executado
cry := TCrystalActiveXReportViewer.Create(Self);
oApp := CreateOleObject('CrystalRuntime.Application');
oRpt := oApp.OpenReport('K:\Copia\rel\comissao.rpt', 1);
// passando o usuario e a senha do bando de dados para o relatório
for i := 1 to oRpt.Database.Tables.Count do begin
oRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := 'usuarioDoBancoDeDados';
oRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := 'senhaDoBancoDeDados';
end;
// exemplo de passagem de parâmetros do tipo data e texto
oRpt.ParameterFields.GetItemByName('data1', '').AddCurrentValue(StrToDateTime( '01/04/2006 15:15:22' ));
oRpt.ParameterFields.GetItemByName('data2', '').AddCurrentValue(StrToDateTime( '05/04/2006 15:15:22' ));
oRpt.ParameterFields.GetItemByName('usuario', '').AddCurrentValue('Francisco Soares');
// criando o formulario que exibirá o relatório
frm := TForm.Create(Self);
try
cry.Parent := frm;
cry.Align := alClient;
cry.ReportSource := oRpt;
cry.ViewReport;
frm.Position := poOwnerFormCenter;
frm.ShowModal;
finally
FreeAndNil(frm);
end;
end;
Espero ter colaborado com esse exemplo. Qualquer dúvida sobre o assunto pode enviá-las que se eu souber eu as repoderei.
Assinar:
Postagens (Atom)
