Postagens populares

Oh vida "vea" boa

quarta-feira, 10 de novembro de 2010

Oracle: Previous, current and next values

Oracle: Previous, current and next values

The Oracle lag and lead functions can be used to retrieve values from a previous row (lag) or a next row (lead). Consider the following example.


SQL> select deptno
2 , lag(deptno) over (order by deptno) as previous
3 , lead(deptno) over (order by deptno) as next
4 from scott.dept
5
SQL> /

DEPTNO PREVIOUS NEXT
------ ---------- ----------
10 20
20 10 30
30 20 40
40 30

sexta-feira, 29 de outubro de 2010

Uma forma de visualizar a descrição de uma tabela no Oracle

A tabela user_tab_columns armazena a descrição das colunas das tabelas, visões e clusters do usuário atual.


SELECT
column_name "Name",
nullable "Null?",
concat(concat(concat(data_type,'('),data_length),')') "Type"
FROM user_tab_columns
WHERE table_name='NOME_DA_TABELA';

terça-feira, 20 de julho de 2010

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

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]

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

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