previnir sqlinjection, retirar vulnerabilidade do sql injection, vulnerabilidade sql injection, corrigir sql injection

Publicado: junho 19, 2009 em ataques, bugs, normal, seguranca
Tags:, , ,

Vou mostrar na pratica como o sql injection funciona.

Eu criei uma pagina de login e criei também um banco de dados para nós fazermos o teste de sqlinjection.

Vamos ao que interessa.

Primeiramente, crie uma pagina em php com o nome de index.php, o sequinte código:

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />

<title>login</title>

</head>

<body>

<form id=”form1″ method=”post” action=”entraounao.php”>

<p>

<input type=”text” />

</p>

<p>

<input type=”text” />

</p>

<p>

<input name=”Submit” value=”Submit” />

</p>

</form>

</body>

</html>

E CRIE outra com o nome de entraounao.php, com o seguinte código:

<?php require_once(“Connections/local.php”); ?>

<?php

//pegando o usuario e a senha via post

$user    =          $_POST[‘usuario’];

$senha =          $_POST[‘senha’];

//Selecionando o banco de dados para depois fazer a verificaçao da senha no banco

mysql_select_db($database_local, $local);

$sql = “select * from usuarios where usuario=’$user’ and senha=’$senha'”;

$rs = mysql_query($sql, $local) or die(mysql_error());

$dados = mysql_fetch_assoc($rs);

//fazendo verificaçao

if (mysql_num_rows($rs)==0){

echo “sua senha digitada está encorreta”;

}

else if (mysql_num_rows($rs)>0){

header(‘location:admin/index.php’);

}

else{

}

?>

Crie um banco de dados com o nome de P1, e cole importe o seguinte código:

# HeidiSQL Dump

#

# ——————————————————–

# Host:                 127.0.0.1

# Database:             p1

# Server version:       5.1.30-community-log

# Server OS:            Win32

# Target-Compatibility: Standard ANSI SQL

# HeidiSQL version:     3.2 Revision: 1129

# ——————————————————–

/*!40100 SET CHARACTER SET latin1;*/

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’ANSI’;*/

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;*/

#

# Database structure for database ‘p1’

#

CREATE DATABASE /*!32312 IF NOT EXISTS*/ “p1” /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci */;

USE “p1”;

#

# Table structure for table ‘usuarios’

#

CREATE TABLE /*!32312 IF NOT EXISTS*/ “usuarios” (

“cod” int(20) NOT NULL AUTO_INCREMENT,

“nome” varchar(255) DEFAULT NULL,

“usuario” varchar(20) NOT NULL,

“senha” varchar(255) DEFAULT NULL,

“nivel” varchar(20) DEFAULT NULL,

“dt_cadastro” varchar(50) DEFAULT NULL,

“dt_alteracao” varchar(50) DEFAULT NULL,

PRIMARY KEY (“cod”),

UNIQUE KEY “usuario” (“usuario”)

) AUTO_INCREMENT=6 /*!40100 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci*/;

#

# Dumping data for table ‘usuarios’

#

LOCK TABLES “usuarios” WRITE;

/*!40000 ALTER TABLE “usuarios” DISABLE KEYS;*/

REPLACE INTO “usuarios” (“cod”, “nome”, “usuario”, “senha”, “nivel”, “dt_cadastro”, “dt_alteracao”) VALUES

(1,’ADMINISTRADOR’,’admin’,’123456′,’3-Administrador’,’Sexta, 27 de Março de 2009′,’Sexta, 27 de Março de 2009′);

REPLACE INTO “usuarios” (“cod”, “nome”, “usuario”, “senha”, “nivel”, “dt_cadastro”, “dt_alteracao”) VALUES

(4,’juan carlos’,’juan’,’123456′,’3-Administrador’,’Quinta, 16 de Abril de 2009′,’Segunda, 01 de Junho de 2009′);

REPLACE INTO “usuarios” (“cod”, “nome”, “usuario”, “senha”, “nivel”, “dt_cadastro”, “dt_alteracao”) VALUES

(5,’joao’,’joao’,’123456′,’2-Gerenciador’,’Segunda, 20 de Abril de 2009′,’Segunda, 20 de Abril de 2009′);

/*!40000 ALTER TABLE “usuarios” ENABLE KEYS;*/

UNLOCK TABLES;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE;*/

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;*/

Agora, basta testar o sqlinjection!

Este código é vulnerável a SQL injection!

Teste a pagina de login com o seguinte código:

Login: ‘or’1’=’1

Senha: ‘or’1’=’1

Teste outros códigos na sua pagina.

Vou ensinar agora algumas formas de si livrar do SQL injection:

Primeiro:

1 – A criptografia na senha e si possível no login, é muito importante pois evita alguns códigos de SQLinjection.

2 – Na hora que for fazer o login, faça uma validação para que a pessoa não possa deixar o campo senha em branco

3 – Faça a conversão para criptografia, na hora do login

4 – Mude o nome das suas tabelas, não deixe nomes conhecidos, exemplo: usuários,users…

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s