Ir para conteúdo
Fórum Script Brasil
  • 0

Segurança


Guest - Deivis -

Pergunta

Guest - Deivis -

Estou construindo um site onde o dono irá cadastrar seus produtos, então gostaria de saber se a maneira que eu fiz a segurança deste é segura?

Fiz uma página de login onde é pesquisado em um DB o nome e a senha do usuário, se ele for cadastrado ele libera o acesso as outras páginas e registra uma variável de sessão, sendo que esta fica registrada até que o usário faça um logout do site, e em todas as outras páginas de acesso restrito é feito a verificação da variável se está registrada. Caso esta não seja uma boa maneira de fazer a segurança para que outras pessoas não acessem as páginas que são restritas ao dono, favor me envie um exemplo de como devo fazer?

Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0

São truque usados para injetar comando SQL em paginas... ou seja uma vulnerabilidade nas linguagens dinamicas......

Suponha que sua pg de autenticação não esteja tratada para lidar com SQL INJECTION

se um usuario da rede colocar no username e senha a instrução

hi' or 1=1--

Fatalmente ele tera acesso ao que você achava ser seguro... testa...

O Fabio tem um codigo contra SQL Injection...

Falou qualquer duvida Posta

Adailton

Link para o comentário
Compartilhar em outros sites

  • 0

O codigo do Fabyo para que quiser....

function anti_injection($sql)

      {

// remove palavras que contenham sintaxe sql

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

$seg = trim($seg);//limpa espaços vazio

$seg = strip_tags($seg);//tira tags html e php

$seg = addslashes($seg);//Adiciona barras invertidas a uma string

      return $seg;

      }

//RECEBE OS DADOS DO FORMULÁRIO

$usuario = anti_injection($_POST["txtUser"]);

$senha = anti_injection($_POST["txtSenha"]);

Adailton

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Deivis -

Eu fiz o código assim:

Esta é a parte que verifica se o usuário está cadastrado do DB e registra a variável de sessão.


  $Nome = $_POST['Nome']; 
  $Senha = $_POST['Senha'];
  if(!(empty($Nome) and empty($Senha))) {
    $conMySql = mysql_connect("$host", "$user", "$pwd");
	if ($conMySql) {
      $sqlUsuario = "SELECT * FROM Operador WHERE Nome='$Nome' AND Senha=password('$Senha')";
      $conDBUsuario = mysql_db_query("$db", "$sqlUsuario", $conMySql);
   if (mysql_num_rows($conDBUsuario) > 0 ){
     $Nivel = mysql_result($conDBUsuario, 0, "Nivel");
     session_register("Nome", "Senha", "Nivel"); //registra variáveis $Nome e $Senha e $Nível
     header("Location: principal.php");
   }
   VerifUsu();
	}
  }

Esta é a parte que verifica se as variáveis estão registradas. Esta função é colocada no início de cada página.
function VerifUsu() {
  session_start("usuarios");
  if (!(session_is_registered("Nome") and session_is_registered("Senha"))) {
    echo "<script>\n";
	echo "alert('Usuário não cadastrado!')\n";
	echo "location.href=('login.php')\n";
	echo "</script>\n";
	die();
  }
}

No caso se eu não usar a função anti_injection($sql) postada pelo adailton, como é que eu posso ter acesso as páginas de acesso restrito, usando SQL INJECTION?

Link para o comentário
Compartilhar em outros sites

  • 0

pra testar você pode fazer assim também:

1' or 1 = '1

explicando

exemplo de uma query

select * from tabela where usuario = 'Fabyo' and senha = '123'

usando sql injection ficaria assim:

select * from tabela where usuario = '1' or 1 = '1' and senha = '1' or 1 = '1'

repare no que a query esta enviando para o servidor, que o usuario = 1 ou 1 = 1

por isso que você não pode fazer um select tão simples assim wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Deivis -

pra testar você pode fazer assim também:

1' or 1 = '1

explicando

exemplo de uma query 
select * from tabela where usuario = 'Fabyo' and senha = '123'

usando sql injection ficaria assim:

select * from tabela where usuario = '1' or 1 = '1' and senha = '1' or 1 = '1'

repare no que a query esta enviando para o servidor, que o usuario = 1 ou 1 = 1

por isso que você não pode fazer um select tão simples assim  

Em minha página de login tem um edit onde a pessoa digita o nome e outro edit onde ela digita a senha, por acaso essa SQL é colocada em algum desses edits, ou ela é passada como parâmetro da página de login. Na verdade eu estou querendo testar a segurança da minha página, então queria saber como é que faço para inserir o tal SQL INJECTION?

Link para o comentário
Compartilhar em outros sites

  • 0

Cara este é seu codigo

    //COM A FUNÇÃOANTI INJECTION

   

    function anti_injection($sql)

      {

// remove palavras que contenham sintaxe sql

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

$seg = trim($seg);//limpa espaços vazio

$seg = strip_tags($seg);//tira tags html e php

$seg = addslashes($seg);//Adiciona barras invertidas a uma string

      return $seg;

      }

//RECEBE OS DADOS DO FORMULÁRIO

$usuario = anti_injection($_POST["Nome"]);

$sh = anti_injection($_POST["Senha"]);

$Nome = $_POST['Nome'];

$Senha = $_POST['Senha'];

if(!(empty($Nome) and empty($Senha))) {

  $conMySql = mysql_connect("$host", "$user", "$pwd");

if ($conMySql) {

    $sqlUsuario = "SELECT * FROM Operador WHERE Nome='$usuario' AND Senha=password('$sh')";

    $conDBUsuario = mysql_db_query("$db", "$sqlUsuario", $conMySql);

  if (mysql_num_rows($conDBUsuario) > 0 ){

    $Nivel = mysql_result($conDBUsuario, 0, "Nivel");

    session_register("Nome", "Senha", "Nivel"); //registra variáveis $Nome e $Senha e $Nível

    header("Location: principal.php");

  }

  VerifUsu();

}

}

Adailton

Link para o comentário
Compartilhar em outros sites

  • 0

No caso quando eu não tinha colocado a função ANTI INJECTION como é que eu faria pra poder acessar as páginas de acesso restrito, que eu não entendi até agora como passar esses códigos para as páginas. Caso alguém tenha um artigo que fale sobre isso, favor poste aí.

Link para o comentário
Compartilhar em outros sites

  • 0
No caso quando eu não tinha colocado a função ANTI INJECTION como é que eu faria pra poder acessar as páginas de acesso restrito, que eu não entendi até agora como passar esses códigos para as páginas. Caso alguém tenha um artigo que fale sobre isso, favor poste aí.

é so colocar

No campo usuario para logar assim como no senha você coloca

1' or 1 = '1

Adailton

Link para o comentário
Compartilhar em outros sites

  • 0

eu coloquei o valor 1' or 1 = '1 tanto no campo de login como no campo senha, mas não foi permitido o acesso a página. Também testei a seguinte SQL no MySQL Front, aí sim funcionou selecionando todos os usuários.

select * from tabela where usuario = '1' or 1 = '1' and senha = '1' or 1 = '1'

Será que eu fiz algo errado, o meu script já foi postado. Porque será que não funciona?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,1k
×
×
  • Criar Novo...