Pesquisar este blog

quinta-feira, 11 de abril de 2013

Implementando Segurança em PHP ao Pegar os Dados via POST ou GET


/* Filtro de caracteres especiais para segurança. Stripslashes e mysql_real_escape_string esta função pode ser usada para limpar os dados recuperados de um banco de dados ou de um formulário HTML, geralmente é chamado de escape de dados.
*/
Campo nome: Zak's Derick's

Escaped string: Zak\'s and Derick\'s Laptop

 Assim o banco de dados vai entender que é um caractere especial, não causando problema ao colocar a aspa simples, evitando o SQL Inject.

// pega e filtra os valores  do post
$username = (isset($_POST['username'])) ? trim($_POST['username']) : '';


$username = stripslashes($username);
$username = mysql_real_escape_string($username);



Outra forma seria remover os caracteres especiais criando uma lista negra, geralmente é chamado de black list.
 
<?php

 function anti_injection($sql) {


 // Remove palavras suspeitas de injection.

$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);

//Remove espaços vazios.
        $sql = trim($sql);
 

//Remove tags HTML e PHP.
       $sql = strip_tags($sql);
 

//Adiciona barras invertidas à uma string.

        $sql = addslashes($sql);

        return $sql;


    }


    $id = anti_injection($_GET['id']);


?>


Outro mais simples:
http://codigofonte.uol.com.br/codigo/php/seguranca/remover-caracteres-indesejados-e-evitar-a-sql-injection


Outra forma seria permitir somente os dados que eu quero receber, geralmente é chamado de white list.

$input = "' or 1='1";

$input = strip_tags($input); // retirar tags php

$output = eregi_replace("[^a-z0-9ã-õá-úà-úãõâ-ûç,.;]", '', $input);

echo $output;
 
Obs: - Não retirar palavras reservadas do SQL: SELECT, UPDATE, etc. 
 
Outro exemplo mais simples:
 
function checa($string)
{
 $string = preg_match("/^[0-9A-z]*$/i", $string);
 return $string;
} 
 
Dica para os testadores, insira os caracteres abaixo nos campos de entrada, 
para analisar o erro que vai gerar.
* \\\\ ' & ¨% $ # ( ) { [ } ] / ^~`´º 
 
 
Boa leitura:
apresentacaosegurancaphp.pdf 
 

Realizando um conexão com MySql por Python

Tive a necessidade de criar um Report Online, agora alimentar através de uma aplicação desktop, primeiro passo criar a conexão a Aplicação com o Servidor de Banco de Dados.


#!/usr/bin/python
# Biblioteca python que deve ser instalada
# http://sourceforge.net/projects/mysql-python/
import MySQLdb

db1 = MySQLdb.connect('servidor_endereco', 'nome_usuario', 'senha','nome_banco')
cursor = db1.cursor()
sql = 'SELECT * FROM tb_report WHERE 1'
cursor.execute(sql)
rows = cursor.fetchall()

#Imprime as linhas da tabela.
for row in rows:
        print row
       
cursor.close()


-> No caso de tentar realizar uma conexão remota local para servidor, tem a necessidade de configurar o servidor primeiro, leia o link:
http://marcosvreis.wordpress.com/2012/01/30/habilitando-conexo-remota-no-mysql-server/