Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

Fundamentos de PHP

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

rafaelgh2005
Pontos: 3092

Visite a página de perfil de Italo Marcelo de O. CostaValidação de Usuários utilizando Sessions e MySQL
por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

Com este artigo, tentarei dar uma introdução de como validar usuários num sistema PHP. Por esse motivo estarei utilizando uma linguagem informal para que quem estiver iniciando entenda com facilidade.
Vote aqui!
Média de Votos Atual: 6.95
Total de Votos: 42
Nota:   

Este artigo tem a finalidade de explicar os tratamentos de sessions em PHP utilizando banco de dados MySQL. Muitos usuários se questionam como utilizar sessions e verificar se o usuário existe ou não no banco de dados. Com isso, irei tentar explicar como fazer um esquema de login utilizando sessions e MySQL buscando o público alvo iniciante que está com problemas na hora de montar as sessões com o seu banco de dados.

Antes de começar, gostaria de deixar bem claro que não vou usar firulas nos scripts, pois somente irei demonstrar a função deste. Vamos pensar na tela de login onde o usuário entrará com o login e a senha. Bom, a idéia principal seria criar a sessão USUARIO para que todos os scripts utilizem esta mas já temos que pensar na volta, ou seja, quando o usuário sair do sistema. Então, o script de login começa assim?

script index.php:


<?php
// se a sessão existir, vou destrui-la.
if  ($USUARIO) {
    
session_destroy(“USUARIO”);
}

echo 
<form method=post action=verifica_sessao.php>;     
echo 
“Login<input type=text name=login><br><br>;
echo 
“Senha<input type=password name=senha><br><br>;
echo 
<input type=submit value=INICIAR SESSAO><br><br>;
echo 
</form>;
?>


Agora vamos registrar o usuário na sessão e entrar no sistema.

script verifica_sessao.php:


<?php
$USUARIO
[0] = $login;
$conc $login.$senha;
$USUARIO[1] = $senha;
$session_register(“USUARIO”);
?>
<script language="Javascript">
<!--
window.open("principal.php","_parent");
//-->
</script>


Após ter registrado este usuário na sessão, o sistema tem que validar em todos os scripts se este usuário e senha existe realmente no banco, da seguinte maneira:

script principal.php:


<?php
session_start
(); // estou inicializando a sessão
$login $USUARIO[0]; // estou pegando o valor gravado na sessão USUARIO na posição 0 (zero)
$senha $USUARIO[1];
$sql ”SELECT nome FROM tabela_usuarios WHERE usr=’$login’ AND passwd=’$senha’”;
include 
“conexao.inc”// imaginando que aqui estou conectando no banco com host, usuário, senha e base de dados e retornando uma variável $cone com a conexão

$logado mysql_fetch_array(mysql_query($sql,$cone));
if (
$logado[0]) {
    echo 
“Seja bem vindo usuário $logado[0]// boas vindas com o nome do usuário
    // ou poderia montar a pagina dinâmica ou estática, dependendo do problema.
} else {
    echo 
<a href=index.php target=_parent>Usuário Inexistente</a>;
}
?>


Bom pessoal, como disse esta é uma maneira simples de validar usuários no seu sistema mas não pode esquecer de que todos os scripts tem que ter esta checagem senão não dá certo.

A intenção foi a das melhores e espero ter ajudado. Abraço a todos.



<< Anterior 1 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Quase isto que quero...
publicado por Lyma Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:01:41

Ítalo,

Seu artigo é excelente, seja pelo conteúdo, seja pela linguagem acessível utilizada.
O que penso em fazer é uma validação usando sessions mas sem usar o FORM nem o Banco de dados. Pretendo usar um header para pedir autenticação e validar comparando com uma variável criada num include.inc da vida...

O problema está justamente na hora de verificar nas demais páginas se o usuário se autenticou ou não... poderia ser usado session neste caso?


Re: Quase isto que quero...
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:07:21

Obrigado Lyma. Então, não vejo problema nenhum...... a partir do momento que vc registrou na sessao..... em todos os scripts, vc starta ela e recupera a informação sem problema.... se tiver duvida, pode postar sua codificacao e eu lhe ajudo, ok.

Abraços.

Re: Re: Quase isto que quero...
publicado por Lyma Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:28:08

Então poderia (ao obter sucesso na autenticação) criar uma session registrar uma variável $login="ok" e em cada script startar a session e verificar se a variável existe para exibir a página?

Re: Re: Re: Quase isto que quero...
publicado por André de Castro Zorzo Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:36:00

Lyma, no teu caso, acho que o melhor seria usar cookie, como já havia dito na faq que respondi referente a esta mesma dúvida !

Re: Re: Re: Re: Quase isto que quero...
publicado por Lyma Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:50:32

Vou localizar a FAQ e verificar o que seria melhor.
Obrigado pela ajuda. E continue com este excelente trabalho que vem realizando no PHPBrasil. A comunidade agradece a colaboradores como ti.

Um forte abraço,
Lyma
http://www.lymas.com.br

Re: Re: Re: Re: Quase isto que quero...
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 06:53:45

Entao.... acho q a session seria muito mais segura do que o cookie.

Falhas de Segurança
publicado por Daniel Melo - 2002-09-12 07:35:01

Este esquema de autenticação apresentado apresenta falhas de segurança , já exploradas diversas vezes na Internet.

Como o script utiliza nomes de variáveis fáceis de advinhar ($login e $senha) e faz a verificação de usuário e senha em um só comando SQL, é fácil fazer um "SQL Injection" :

principal.php?login="nada OR 1=1#" .

Pronto, é so aplicar um URLEncode na string acima e chamar no navegador...


Re: Falhas de Segurança
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 08:11:05

Daniel, grato pelo aviso mas a intenção eu demonstrei no início do artigo. Uma outra coisa...... tenho alguns sistemas na internet no qual eles trabalham desta maneira e apliquei inclusive algumas dicas de um amigo que publicou um artigo aqui na phpbrasil e nao funcionou... como este caso q vc postou ai......
Mas agradeço pela dica e se tiver mais alguma correção, por favor... me ajude!!!

Re: Falhas de Segurança
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 08:27:26

Ah, outra coisa, Daniel..... existe uma grande sacada tbm que eh.... qdo vc executa este login=' or 1=1'.. etc.... o q vc retorna do banco eh vazio.... consegue enxergar o q eu estou demonstrando.... se o cara fizer uma validacao.... morreu, amigo.

se vc tiver algumas tentativas de burlar o sistema..... gostaria que mandasse pra mim, por gentileza, soh pra eu testar..... se funcionar te posto a resposta......

VALEU AMIGO!!!!!

Muito bom
publicado por rac - 2002-09-12 09:45:38

O artigo está excelente. resolveu meu problema.

Re: Re: Re: Re: Re: Quase isto que quero...
publicado por André de Castro Zorzo Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 10:01:06

Não entendo porque seria mais seguro? Basta usar criptografias, além do mais, era apenas para guardar a indicação de que o usuário já logou... ou seja, o usuário faria o login uma única vez e nas outras páginas apenas seria verificado se o cookie estava setado ou não, caso estivesse, sinal de que o usuário já passou pelo login, do contrário, direciona o usuário para o processo de login...

:-)

My SQL
publicado por Fábio Leal - 2002-09-12 13:04:05

Prezados Srs,

A empresa onde trabalho está pensando em começar um trabalho onde desenvolveremos soluções usando PHP e My SQL.
Onde posso conseguir as licenças desse Banco?

Re: My SQL
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 13:08:04

O MySQL é free.... então eu acho q naum precisa de licença.. vc pode baixa-lo no
www.mysql.com
e o php ..... na www.php.net

Excelente??
publicado por Leandro Antonio - 2002-09-12 14:02:49

Não seria mais prático verificar o login apenas uma vez e se for encontrado o registro, seria gerada uma sessão? E nas outras páginas que precisam de autenticação, bastaria apenas colocar uma condição para verificar se a sessão está ativa ou não.

Re: Excelente??
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-12 15:02:50

Seria mais prático mas não seria mais seguro.

Re: Re: My SQL
publicado por Mauro Luis Ribeiro - 2002-09-12 17:13:21

Buenas !

Tchê italo o artigo ta bueno soh gostaria de fazer uma pequena correcao referente ao mysql, ele eh free se vc for usa-lo sem fins lucrativos caso contrario se vc for vende-lo em anexo com um sistema feito por vc(por exemplo) vc eh que teria que pagar a licenca que gira em torno de U$200 dolares.

Valeu,

Gordo

Usa encriptação!
publicado por Samuel Abreu - 2002-09-12 21:26:52

Se vc usar a senha em md5, além de ser mais seguro, tira essa coisa do injection, já q se vc por: ' or 1=1 ele não vai conseguir, pq irá ter um and com a senha, e nao da pra por ' or 1=1 estando encriptado com md5!!
Como tenho paranoia, tb ponho um check pra ver se tem caracteres não alfanumericos! =)

Re: Usa encriptação!
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 06:37:16

Então samuel, nao sei se vc viu...... mas no inicio do codigo eu faço a concatenação do login e da senha...... ali vc poderia aplicar o hash... eh esta a minha visão....

Eu coloquei o artigo assim, respeitando os iniciantes na linguagem..... eh q tem gente q naum entende.... velho

Valeu pela atenção e obrigado por enquanto.

Re: Re: Re: My SQL
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 06:38:26

Valeu Gordo...

Duvida
publicado por Beto - 2002-09-13 07:26:08

Estou com uma duvida simples:
Qual é a função da variavel no segundo bloco do codigo que junta o login e a senha:
$conc = $login.$senha; ???????

Re: Duvida
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 07:30:11

Não tem função.... o ponto (.) jah faz a concatenação das duas strings....

Re: Usa encriptação!
publicado por Daniel Melo - 2002-09-13 09:26:37

O SQL Injection que eu apresentei :

" OR 1=1#"

funciona mesmo que as senha esteja criptografada.

Isto acontece porque o caractere "#" indica inicio de comentário! Ou seja o resto do comando SQL que verifica a senha vai ser ignorado.

Italo : Eu ja testei este SQL Injection e funcionou ....

Outros tipos de SQL Injection estao no proprio manual PHP :

http://www.php.net/manual/en/security.database.php

Eu acho que resolver este problema (pelo menos em parte) , seria interessante ao fazer a query, armazenar o login a senha que vieram do banco em variávei e compará-las com os dados vindos do usuário no código PHP.


Segurança.
publicado por Lyma Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 10:34:25

Evitando-se maiores contratempos eu mudaria a linha 3 para:

$sql = sprintf("SELECT nome FROM tabela_usuarios WHERE usr='%s' AND passwd='%s';", addslashes($username), md5($password));

Ou algo do tipo.

Lembrando que a senha deve ter sido criada também com a função md5().
(validar tudo antes é válido, mas fora do escopo do tutorial)

Mesmo sabendo que o artigo é direcionado ao iniciante no PHP, temos que lembrar que é "desde criança que se aprende" :)

Que tal um bom Artigo sobre segurança em formulários? Quem se habilita?

Re: Re: Usa encriptação!
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 10:47:07

Daniel, não duvido, de sua capacidade... mas cara... tenho sistemas aqui... estou preenchendo o formulário com login=" OR 1=1#" e senha=" OR 1=1#" e não entra... eh por isso que eu tenho dúvida, ok

Nao tenho nenhum ressentimento e para isso vou disponibilizar este esquema de cadastro em minha página e passar pra vc testar esse tipo de sql injection....

Valeu novamente, Daniel.

Re: Segurança.
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 10:49:40

Lyma, eu sempre aplico o hash na concatenação, ou em qualquer tipo de senha que trabalho.... qdo disse que era pra iniciante.... a minha idéia não é de fazer uma porcaria de artigo.. e sim para que entendesse de uma forma simples.

"Algumas vezes, a jaca cai em nossos braços mas estamos preparados para carregar uma uva".

Grato.

duvida
publicado por Rafael - 2002-09-13 16:44:28

seguinte.. uso autentificacao assim:
o cara digita o login e a senha no form..
e eu fasso uma busca no bd com o login e a senha.. se voltar algo o cara tah logado
sei q eh MUITO inseguro..
mas oq q eu fasso pra tornar seguro?
q funcao faz NAO passar os codigos q na devem passar?

teste e nao deu
publicado por Rafael - 2002-09-13 16:46:29

colokei isso no form de login e senha e nao deu:
=" OR 1=1#"
disse simplesmente q a senha estava incorreta..
=)

Re: teste e nao deu
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-13 17:41:16

Então cara..... eh o que eu obtenho qdo faço este mesmo teste....

Meus scripts não possui problemas com SQL Injection........ mas estou esperando dos amigos algumas formas para quebrar isso.

AGORA QUEM ESTÁ INTERESSADO EM SQL INJECTION, SOU EU

hehe
publicado por Rafael - 2002-09-13 18:38:09

tb to muito interessado nessas bagaSSa... jah testei varios.. e nunca kebra nada do sistema...
mas vamo ve q q da
=)

Pres. Prudente RLZ
publicado por João - 2002-09-14 00:33:34

<?php
echo "Italo, eh isso ae mano! Eh a galera de Presidente Prudente comandando no PHP...\nEu tb sou de prudente e tb sou da UNOESTE, sou da turma de TI, meu primeiro termo cara...\nMai eh nois!";
?>

Não precisa ser desse jeito!
publicado por Vinicius Garcia Mommensohn - 2002-09-14 07:12:07

Usar autenticação por propagação somente pela sessão não é nem muito seguro nem muito eficaz. É simples acabar com problemas de segurança e de propagação de variáveis.

Após a autenticação, salve em uma tabela separada no mysql o PHPSESSID e o login da pessoa que se logou. Cada página que a pessoa for entrar, é só verificar nessa tabela se a sessão tá guardada lá. Se não quiser ficar guardando lixo, coloque um campo para se colocar o unixtime e na função de logar peça para que o php apague por um certo tempo.

Qualquer hora posto um artigo sobre isso :)

Um abraço.

Re: Re: Re: Usa encriptação!
publicado por Daniel Melo - 2002-09-14 11:39:55

Italo,

O SQL Injection neste caso é substituir a variavel login por :

"qualquercoisa' OR 1=1#"

Como fazer isso? Tem que pegar primeiro a versao URLEncode desta string. Faca um script PHP que retorne a funcao urlencode() desta string. O retorno vai ser :

qualquercoisa%27+OR+1%3D1%23

Agora va no browser e coloque no endereço :

http://servidor/caminho/principal.php?login=qualquercoisa%27+OR+1%3D1%23

O seu comando SQL vai ficar :

SELECT nome FROM tabela_usuarios WHERE usr=’qualquercoisa’ OR 1=1# AND passwd=’$senha’

O caractere # é comentário em SQL. Logo tudo que vem depois dele vai ser ignorado. Entao se sua senha era criptografada ou hasheada, nao vai adiantar de nada.

Como a condição de sua query SQL vai ser verdadeira sempre, entrao ela vai retornar todos os nomes de usuários da tabela "tabela_usuario".

Seu sistema então vai autenticar este intruso como o primeiro usuário da tabela.

Isso é SQL Injection. Eu nao descobri isto, isto está publicado no manual do PHP!

Regra única de segurança : Nunca confie em dados vindo de usuários ou de cookies. Sempre trate eles com expressões regulares.

Isto evita 99% dos ataques a sistemas web.

Saudações





Re: Re: Re: Re: Usa encriptação!
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-16 06:28:55

Valeu Daniel..... pela dica......

Eu usei essa sql injection e nao funcionou.... mas valeu e obrigado.

Sessions
publicado por noal - 2002-09-16 07:19:26

Alguém possui um tutorial que trate especificamente de sessions em php. Estou precisando de um, pois preciso fazer um site para inscrição em um concurso e pelo que aindei estudando a melhor maneira de fazer a verificação dos usuários, bem como a passagem dos seus dados pelas páginas seria utilizando sessions.

Antecipadamente agradeço
Noal

Re: Sessions
publicado por Mauro Luis Ribeiro - 2002-09-16 08:03:06

Buenas!

Tchê, procura aqui no site que tem um artigo que fala sobre sessions e bem interessante.

Valeu,

Gordo

Gostei muito...
publicado por Dieguito - 2002-09-17 10:06:00

Esta é a primeira vez que acesso esse Site, mas não vai ser a última, gostei muito da maneira como tratou esse tutorial.
Parabéns:
Pelo artigo;
Pelo Site.
10
Valeu´s
[]´s
Dieguito

Muuito Bão!!!!!
publicado por Michel Souza - 2002-09-20 13:22:38

Estava precisando muito de um script desses!!! pois tenho um site onde precisava proteger algumas partes e ele funcionou muito bem!!!

parabéns e obrigado!

COMO MANDAR O USUÁRIO PARA UMA QUARTA PAGE?
publicado por ASCII - 2002-09-21 07:59:36

Como mando um usuário para quarta pagina após o principal.php e autentificando a session, para que não possam entrar do nada no sistema...

RE:COMO MANDAR O USUÁRIO PARA UMA QUARTA PAGE?
publicado por adel - 2002-09-22 21:11:25

ASCII, vc pode usar o header e manda-lo para a pagina desejada, lembrando que vc não pode definir nenhum tipo de codigo html antes do header, senão ele não funfa!

<?
header("Location: http://www.suapagina.com.br");
?>

[]'s adell

password(' ')
publicado por Sergio - 2002-09-23 10:15:08

Cara, minha duvida nao e tao sinistra como algumas que via aparecendo por aqui. Quando cadastro um usuário, uso a encriptação do mysql password('senha'). Até ai tudo bem, mas como faço pra validar o usuário depois? Existe alguma funcao em php que sirva para desemcriptar o password do mysql? Como ficaria $sql = ”SELECT nome FROM tabela_usuarios WHERE usr=’$login’ AND ??? ?
Mais uma coisa, essa encriptação do mysql é segura ?

Re: password(' ')
publicado por Luiz Jesus - 2002-09-23 14:25:41

Cara usa o função encode() e decode() a função q vc esta usando não tem como descriptografar

Re: password(' ')
publicado por Mauro Luis Ribeiro - 2002-09-23 18:35:31

Buenas!

Soh um comentario: "Hoje em dia nada é 100% seguro.".

Valeu,

Gordo

PASSWORD
publicado por rafael - 2002-09-23 18:39:03

nao rola usar where login = '$login' and senha = PASSWORD($senha)
pra ele criptografar e procurar por ela criptografada?

interesse em saber!
publicado por Isgul - 2002-09-23 23:50:20

Eu estou querendo fazer um site de busca para minha cidade mais eu nao estou entendendo muito o desenvolvimento.. estou a procura de um livro q me encine melhor se vc saber de algum por favor me mande um e-mail estou disisperado pq essa ideia ja vazou e ja tem pessoas super interessadas em fazer esse site e eu nao quero pagar paa alguem fazer eu mesmo quero fazer sakou, para eu aprender a mexer e ficar nesse ramo!

Administrador de Base Dados MySql
publicado por Leandro Melo - 2002-09-25 13:18:35

Olá Amigos

Gostaria de saber, se alguém aqui do fórum sabe onde posso encontrar um programa que faça a administração on-line de uma base dados em MySql. Eu cheguei a utilizar o phpMyAdmin, mas teve uma certa vez que encontrei um programa que era a cara do Access. Depois perdi o programa e a página onde baixei. Será que alguém conhece este programa?

Valeu galera!!!

PASSWORD
publicado por Beto - 2002-09-25 13:29:30

Gostaria de saber se há uma resposta para a pergunta do rafael "logo acima", pois estou com a mesma duvida !!!
Na hora de criptografar a senha no insert vai tranquilo o comando PASSWORD('senha'), mas na hora de checar no select com o comando WHERE senha_sql_criptografada = PASSWORD('$senha_login') retorna sempre vazio !? gostaria de saber se há uma solução para isso !!!

Re: PASSWORD
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-25 15:50:57

Beto e rafael, eu faço de forma diferente. Eu uso md5 na hora de inserir e na hora de logar tbm.

$login=italo
$senha=123456
$conc=$login.$senha;// PARA ENTENDIMENTO
$senha=md5($conc);
insert into TABELA values ($login,$senha)

na tentativa de logar no sistema, o usuario entra com seu login e senha..... e para verificar eu faço o seguinte

$conc=$login.$senha;
$senha=md5($conc);
$tem=mysql_num_rows(mysql_query("select * from TABELA where login='$login' and '$senha'));

logico q eu nao pergunto qtas linhas veio... o questionamento q uso eh um pouco mais complexo mas assim jah dah pra notar, ok.


Re: Re: PASSWORD
publicado por Beto - 2002-09-26 12:30:39

Agora ficou blz... Valeu !

Erro
publicado por Tulio - 2002-09-26 12:52:54

Fatal error: Call to undefined function: () in D:\WebSite\\verifica_sessao.php on line 6

pq ta dando isso? copiei igualzinho da pagina ???

Re: Erro
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-26 13:15:15

a opcao de habilitar session no php.ini está desabilitada..... tem que habilitar senao ele nao registra a sessao.

Eh q na maquina q estou agora nao tem php.ini... mas dah uma procurada por session no php.ini e habilita... eh esqueminha tipo 1 ou 0

Re: Re: Erro
publicado por Tulio - 2002-09-26 13:49:42

$sql = "SELECT * FROM login WHERE user='$login' AND pass='$senha'";

ele nao ta comparando isso certo?
tem algo no php que nao deixa comparar assim, fiz um login antes com http_post_vars ele deu, assim nao da

urgente
publicado por Tulio - 2002-09-26 14:02:12

italo me ve um contato mais rapido...
vc tem icq? msn? mirc? algum chat...

Monografia e PHP
publicado por Tânia Baima Maia - 2002-09-27 18:00:33

Estou concluindo o curso de análise de sistemas e minha monografia será sobre biblioteca digital. Gostaria de desenvolver um protótipo de um site em php para a coordenação do curso, através do site será possível acessar monografias, trabalhos, textops, etc., dos alunos e dos professores do curso. Detalhe: meu tempo está acabando e agora que estou aprendendo php, pelo que vi é semelhante ao C e, já estudei C. O que quero saber é: quanto tempo, em média, um iniciante demora pra fazer algo que, aparentemente, é tão simples? Se alguém quiser me dar dicas de código eu agradeço.

Nao intendi
publicado por Mr. eu - 2002-09-29 12:52:35

eu queria saber como faz para por banco de dados em meu site... eu nao intendi direito..

o cara faz cadastro e depois vai na senha e login... e ve seus dados... como faz????

Erro no código
publicado por Leandro Almeida - 2002-09-29 13:57:30

Peguei o código e fiz como esta descrito na página mais ocorreu este ERRO:

Fatal error: Call to undefined function: () in c:\arquivos de programas\apache group\apache\htdocs\login\verifica_sessao.php on line 5

Onde eu errei e como posso concertar este código e por favor o include conexao.inc que informações ele deve conter, algem pode me mandar um arquivo pronto e com a base de dados certa.

Obrigado,
Leandro Almeida

Ajuda
publicado por - 2002-09-30 12:37:23

Peguei o código e fiz como esta descrito na página mais ocorreu este ERRO:

Fatal error: Call to undefined function: () in c:\arquivos de programas\apache group\apache\htdocs\login\verifica_sessao.php on line 5

Onde eu errei e como posso concertar este código e por favor o include conexao.inc que informações ele deve conter, algem pode me mandar um arquivo pronto e com a base de dados certa.

Obrigado,
Leandro Almeida

Re: Ajuda
publicado por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site - 2002-09-30 13:50:38

<?php
$USUARIO[0] = $login;
$conc = $login.$senha;
$USUARIO[1] = $senha;
$session_register(“USUARIO”);
?>

perceba que ele nao está conseguindo registrar a sessao.... eh problema no php.ini

a opcao de habilitar session nele esta desabilitada.... eh soh abilitar... vah no c:\windows\php.ini e procure a opcao e caminho para a session... tlz o caminho para a sessao eh do linux e nao do windows ai.. eh soh vc alterar...

[Session]
session.save_handler = files ; handler used to store/retrieve data
session.save_path = c:\php\session_data ; argument passed to save_handler
; in the case of files, this is the
; path where data files are stored
session.use_cookies = 1 ; whether to use cookies
session.name = PHPSESSID
; name of the session
; is used as cookie name
session.auto_start = 0 ; initialize session on request startup
session.cookie_lifetime = 0 ; lifetime in seconds of cookie
; or if 0, until browser is restarted
session.cookie_path = / ; the path the cookie is valid for
session.cookie_domain = ; the domain the cookie is valid for
session.serialize_handler = php ; handler used to serialize data
; php is the standard serializer of PHP
session.gc_probability = 1

Erro de sessão
publicado por Marcelo Soares - 2002-09-30 14:26:51

Tentei fazer o exemplo, me deu os seguintes erros:

Cannot send session cookie - headers already sent by

Cannot send session cache limiter - headers already sent

Quem puder ajudar....

Para acabar com o problema da Senhas!!!!
publicado por Ricardo Guedes - 2002-10-01 22:18:53

<corta>
$login = $USUARIO[0];
$senha = $USUARIO[1];
//modifiquei a sql coloquei usr,passwd para
//serem selecionado tb
$sql = ”SELECT nome,usr,passwd FROM tabela_usuarios WHERE usr=’$login’ AND passwd=’$senha’”;
include “conexao.inc”;
$logado = mysql_fetch_row(mysql_query($sql,$cone));
//com isso deve ter vindo resultados...
//vamos supor que sim
//A jogada esta aqui!!!
if ($logado[1] === l$login && $logado[2] === $senha) {
echo “Seja bem vindo usuário $logado[0]”; // boas vindas com o nome do usuário
// ou poderia montar a pagina dinâmica ou estática, dependendo do problema.
} else {
echo “<a href=index.php target=_parent>Usuário Inexistente</a>”;
}
?>

Espero com isso acabar de vez com os problemas de senha do pessoal!!!

FORA SQL INJECTION =]

PS1: mesmo aplicando SQL Injection o lance não vai funcionar pq a variavel $senha não vai bater com $logado[2]...

PS2: Utilizem nomes de variaveis não usuais de mais... tipo para usuario -> $login e para senha -> $pass

Falow mocada!!!

No Flames!!!

Sobre as Sessions sobre o IE 6
publicado por Eduardo - 2002-10-02 15:33:13

Caro Ítalo, seu artigo é muito interessante e estruturado, gostaria apenas de colocar uma ressalva: não foi possível criar uma sessão sobre o IE6 em win2000, mas em uma versão menor do IE este código funciona. Este comentário é pertinente também para cookies onde todos os parâmetros devem ser preenchidos para que o cookie seja criado.
Caso algum parâmetro não seja informado não é possível criar o cookie.
Caso alguém verifique um erro no meu comentário,por favor me corrija. Boa Sorte a todos.

Eduardo

Não funcionou
publicado por walter - 2002-10-04 06:02:05

Prezado, como estou começando a trabalhar com PHP, algumas perguntas:

- Escrevi e executei o código exatamente como consta no artigo, entretanto observei que o mesmo não funcionou, ou seja, os valores das variáveis login e senha em index.php não são "vistas" em principal.php. Há alguma configuração em php.ini que deve ser ajustada ??

- a linha $session_register(“USUARIO”), de verifica_sessao.php, onde está "sobrandro" um $, deveria ser session_register('USUARIO') ?? ou session_register("USUARIO") ??

- apesar de um colega já ter perguntado para que servia a linha $conc = $login.$senha, não entendi a resposta. A variável $conc tem algum objetivo ou uso posterior ??

Abraços, Walter.

SQL Injection
publicado por Daniel Correia Barreto - 2002-10-15 17:44:18

Eu testei o SQL Injection direto no código, e ele funcionou, mas quando ele vai via url, todo a injection transforma-se em um string:

Select * from tbusers where login = 'algo OR 1=1'...

Mas apesar de tudo naum consegui fazer esse injection funcionar mesmo com o urlencode(),
se alguem que conseguiu fazer funcionar me mostrasse quais são os passao corretos, eu agradeceria.

Daniel C. Barreto

Re: Não funcionou
publicado por Jonathan - 2002-10-18 23:34:39

aq tb nao funcionou, gostaria de saber pq!

Dúvida!?!?!?
publicado por Eduardo Ukstin - 2002-10-22 18:47:15

Excelente o tutorial.

Mas eu gostaria de saber com faço pra logar os usuários cadastrados no linux em uma sessão do php, ao invés de procura-los no mysql. Alguma sugestão?!?!?

ERROS
publicado por - 2002-10-23 14:52:38

Este script não funciona na minha h, sera que alguem tem algum outro tipo de autenticação de usuarios.

Parametros
publicado por Vinícius Eloir Kienen - 2002-10-24 13:30:00

tenho uma page que usa session para o contador de acessos.... o script funciona perfeitamentem, mas na primeira vez em que o usuario entra na hp, quando a sessao é registrada, todos os links da pagina ficam mais ou menos assim: link.php?meuparametro&PHPIDSESSION=21093871832712opihasdf

como eu uso parametros, os linkis da primeira vez em que o usuario entra na pagina ficam errados! como evitar isso"?

SQL Injection
publicado por Alex Oliveira - 2002-11-17 13:20:25

Já vi vários artigos para burlar login e senha através da url, testei diversas vezes e não rolou nada.


Re: Administrador de Base Dados MySql
publicado por Marcel Vittone - 2002-11-19 17:15:29

Véio já ouviu falar em MySQLFront, é o que eu uso e recomendo, talvez seja disso que cê tá falando... Procura na superdownloads.com.br que deve ter...

Um Abraço! E adoro essa page!!

erro no codigo
publicado por LuizSJ - 2002-11-21 18:45:19

na linha onde se le
$session_register(“USUARIO”);

NAO SERIA apenas:

session_register(“USUARIO”);


SQL Injection
publicado por Éder J. Chagas - 2002-11-21 20:50:40

Pq vcs nao fazem o seguinte teste.

SELECT * FROM usuarios WHERE password('$senha') AND login='$login';

assim o primeiro teste é a senha criptografada pelo próprio mysql. E aí alguém consegue burlar isso.

SQL Injection
publicado por Maximo Poder - 2002-11-27 14:59:31

Se o php estiver configurado com 'magic_quotes on' no php.ini, ele bota backslashes(\) automaticamente em aspas nas strings de GET/POST/Cookies.

Se estiver assim, o injection vai ficar junto com a string (='senha injection') e nao como comandos do sql, pois não ha como encerrar a string.

Nas versoes mais recentes do php, magic_quotes esta desligado por default.

[retirado de php.ini]
; - magic_quotes_gpc = Off [Performance]
; Input data is no longer escaped with slashes so that it can be sent into
; SQL databases without further manipulation. Instead, you should use the
; function addslashes() on each input element you wish to send to a database.

SQL Injection
publicado por Mutante - 2002-11-29 08:13:22

Olá pessoal,
Sou novo PHProgrammer, acho que entendo porque a maioria não conseguiu fazer o SQL Injection funcionar simplesmente por
que esqueceram " ' " no meio da string, sem isso a parte que realmente faz efeito " or 1=1 #"
fica fazendo parte da string $user e não do comando sql.

SELECT * FROM usuarios WHERE user ='$user' AND pass = '$pass'

se colocarmos
user = BLAH' or 1=1 #
codificados no url

a string com o injection ficaria:

SELECT * FROM usuarios WHERE user ='BLAH' or 1=1 #' AND pass = '$pass'

ou seja a primeira condição user ='BLAH' estaria errada, o " ' " depois de 'BLAH é o que estava fazendo diferença,
pois ele fecha a string e continua com o comando sql...
então a segunda parte 1=1 seria considerada uma condição correta obvio
e #' AND login = '$pass' será ignorado. Percebam que o " ' " depois do # é o original do comando sql, que foi kicado.

Acho que a solução do Maximo Poder também, se bem que no meu caso se a opção magic_quotes estiver desabilitada,
ja era pq meu site está hospedado em um provedor.

A do Samuel, que checa por caracteres não alfanumericos antes da consulta sql
seria mais aconselhavel, pois funciona em ambos os casos.

gostaria de saber agora existe uma função como esta pronta.

Legal isso que o Daniel falou não sabia que sql injection existia.

SQL Injection
publicado por Maximo Poder - 2002-12-02 13:17:17

Eu uso o seguinte no topo dos meus scripts:

if (!ini_get("magic_quotes")) {
foreach ($_REQUEST as $key => $value)
$_REQUEST[$key] = addslashes($value);
}

$_REQUEST armazena todas os dados q sao enviados pelo usuario e portanto nao podem ser confiados.

Nunca testei, mas deve funcionar.

Erro
publicado por Tiago - 2002-12-05 08:37:18

Eu testei as scripts mas deu um erro, na script verifa_sessao, na linha 5:
$session_register(“USUARIO”);
Deu essa mensagem:
Erro Fatal: Call to undefined function: () in verifica_sessao.php on line 5

O que aconteceu?

Valeu

Re: Erro
publicado por Italo M. - 2002-12-05 15:11:30

Cara.... foi um erro meu.....eu coloquei $ no session_register.....e nao tem.... é só
session_register("USUARIO");

Mais sobre segurança...
publicado por Alysson Auad - 2002-12-06 14:52:46

Falaram bastante a respeito da segurança de entrada de dados mas acabaram esquecendo uma falha que pra mim deve ser considerada como mais grave...

Qdo utilizamos a função include, temos que ter cuidado com o nome que será dado ao arquivo, se o arquivo for chamado como no exemplo acima conexao.inc, se vcs tentarem visualizar o arquivo no navegador vcs vão obter duas resposta:

-> Se o administrador do servidor colocou o .inc como uma extensão do php não vai aparecer nada na tela

-> Mas se não foi adicionada essa opção, o navegador vai abrir uma janela de diálogo perguntando o que vc deseja fazer com o arquivo, se o "hacker" copiar o arquivo vai ter acesso ao nome do usuário e senha de conexão ao Banco de Dados.

Se vc não é administrador do servidor e quer evitar esse problema basta modificar o nome do arquivo para conexao.inc.php, assim vc vai continuar sabendo que é um arquivo de include, mas se tentar abrir no navegador nada vai acontecer...

Um grande abraço a todos e boa sorte na segurança dos sistemas,

Auad

Sobre o SQL Injection...
publicado por Alysson Auad - 2002-12-06 15:01:32

Sou eu de novo...

Todas as tentativas do SQL Injection falharão por um motivo bem simples, qdo usamos por exemplo:

?login=teste%27+OR+1%3D1%22;%23

estamos tentando obter uma linha de comando parecida com essa, já em substituição na query:

SELECT * from tabela WHERE login='teste' OR 1=1";#' AND senha=''

o que teoricamente se o login não fosse ok o 1 sempre será igual a 1, só que o que acontece é que qdo usamos aquela url codificada obtemos:

SELECT * from tabela WHERE login='teste\' OR 1=1\";#' AND senha=''

repare que antes da aspa simples adicionada através do %27 e da aspa dupla conseguida através do %22 foi adicionado uma \ para poder escapar as aspas e considerar ela como um caracter, se alguém conseguir evitar que ela seja considerada um caracter e seja considerada como o fim de uma instrução o SQL Injection vai funcionar, assim acredito!

Se alguém conseguir, mande uma resposta...

Minimizando problemas
publicado por Rafael Farias - 2002-12-12 16:27:07

pra minimiza o problema, poderíamos evitar logins q contenham espaço, os caracteres "=" e "#", e aspas...

isso talvez não deixará seu sistema 100% seguro, mas em relação à este problema resolverá...

Re: Minimizando problemas
publicado por Rafael Farias - 2002-12-12 17:29:40

soh por segurança msm, permita apenas senhas e usuários compostos por letras e números, evitando principalmente espaços, =, &, #, pontos e vírgulas...

utilize a condição IF na hora do registro d usuario.

um exemplo simples que proibi os principais caracteres utilizados para 'burlar a segurança':


<?
$usuario = str_replace("'", "", $usuario);
$usuario = str_replace('"', '', $usuario);
if (strlen(ereg("[(.#$%&*,;.!?)]")) != 0) {
echo "Caracteres inválidos";
}
else { *página* }
?>


usar '' nas variáveis do mysql_query tb ajudam.
ex.: WHERE login='$login' ao invés de login=$login para maior segurança.

Re: Re: Minimizando problemas
publicado por Rafael Farias - 2002-12-13 09:50:57

Uma pekena correção, eskeci d coloca a var no ereg:

troque:
if (strlen(ereg("[(.#$%&*,;.!?)]")) != 0) {
por:
if (strlen(ereg("[(.#$%&*,;.!?)]", $usuario)) != 0) {

=P

Sobre Session
publicado por GuileW - 2002-12-13 13:36:19

Italo,

só tem alguns detalhes que precisam ser esclarecidos... sobre o que eu li nos manuais do PHP e pesquisas, as funções session_start() e session_destroy() não levam argumentos nenhum, ou seja, session_destroy("USUARIOS") seria a mesma coisa que session_destroy(). Correto? E outra coisa... Tem que cuidar se o PHP foi compilado com --enable-trans-id senão, tem que propagar o SID através da URL

Segurança
publicado por Maximo Poder - 2002-12-16 12:55:12

Ei Ítalo, que tal voce ou algum outro colunista criar um artigo sobre segurança, já que esse aqui nem era sobre isso mas acabou tendo muitos comentarios.

O assunto é de importancia e bem extenso.

Sessions ainda são muito abstratas por mim...
publicado por Enxofre - 2002-12-30 12:31:10

Gostei muito deste artigo. Apesar de ainda não entender direito sessions.

Quanto ao SQL injection, acho que mesmo usando-o fica difícil funcionar após uma codificação MD5 da concatenação do login com a senha.(algo como: ...$f_user["senha"]= md5($login.$senha);) A senha real seria essa "amálgama" gravado no banco. A senha em mãos do usuário seria usada apenas para valida o "amálgama".

Estarei eu certo? Me avisem.

Re: Sessions ainda são muito abstratas por mim...
publicado por Rafael Farias - 2003-01-02 10:06:49

Nem precisa concatenação se vc usar md5, pq se o cara usar " ' OR 1=1 " na senha, o md5 já codifica no seu método, que utiliza apenas alfanuméricos, solucionando o problema.

Mas se o usuário usar no login q é o problema, por isso usar ereg() na autenticação e no cadastramento, proibindo o envio de caracteres não-alfanuméricos.

Como o exemplo q eu citei acima e vo melhora um pouco agora =P :

if (strlen(ereg("[(.#$%&*,\";.\'!?)]", $usuario)) != 0 || strlen(ereg("[(.#$%&*,\";.\'!?)]", $senha)) != 0) {
header ("Location: erro.html");
}
else { ... }

simples exemplo que não utiliza o MD5.


flw´s

autenticacao
publicado por Rodrigo de Oliveira - 2003-01-13 19:15:49

fiz a autenticacao da minha pagina usando variaveis globais...
só que no server, o register_globals ta off...
gostaria de saber como fazer pra isso pegar

tentei usar esse script e deu erro no array, linha nove.

$logado = mysql_fetch_array(mysql_query($sql,$cone));

alguém pode me tirar essas duvidas?

password
publicado por pedro - 2003-01-15 13:39:41

como ponho que ao entrar no meu site peça username e passowd???

Re: autenticacao
publicado por Roberto Francisco - 2003-01-16 06:06:00

Rodrigo,
Dê uma olhada no ini_set() se é possivel alterar runtime no server:
http://www.php.net/manual/pt_BR/function.ini-set.php
Ler os comentários (em ingles).

explicação
publicado por wendel - 2003-02-02 14:50:35

estou tentando aprender como funfa o sql injection, e tive noticia que aqui muitos sabem explorar essa falha !!!
intaum eu agradeço ce alguem com uma boa vontade me me explicasse como funciona passo a passo , ce eu preciso de alguma ferramenta, que tipo de sites usa esse banco de dados,desde ja agradeço pois estou tentando aprender isso para por em meu site sobre segurança !!!

Re: password
publicado por Fabrício Nogueira Magri - 2003-02-19 13:19:47

Vc pode fazer isso com um if.

se usuario não estiver logado entre na página de login, caso já esteja logado, entre na pagina.

&lt;?php
if ($usuario=="") {
echo "&lt;META Http-equiv='refresh' content='0;url=login.php&gt;";}
else {
echo "&lt;META Http-equiv='refresh' content='0;url=index.php&gt;";}
?&gt;

bem, este é um php bem simples, só para te dar uma ideia de como pode fazer.

Valeu Pessoal!!!
publicado por zalmen - 2003-07-06 18:12:40

Até então eu utilizava um controle de usuários com session bastante simples sujeito a falha de segurança.
Juntei o artigo do Italo, mais as opniões e dicas dos colegas Rafael Farias e Ricardo Guedes e melhorei e muito meu controle de usuários. Valeu Pessoal!!!

Erro na prg
publicado por marciojm - 2003-08-23 21:01:53

Olá, estou com o seguinte erro
Warning: Cannot send session cache limiter - headers already sent (output started at C:/XITAMI/webpages/teste/verifica_sessao.php:1) in C:/XITAMI/webpages/teste/verifica_sessao.php on line 2
Alguém pode me ajudar a resolver???
grato

!= SQL INFECTION
publicado por luizhtg - 2005-10-28 11:39:48

Não sei pra que tanta tempestade num copo dagua, uma simples verificaçao de caracters QUE NAO DEVEM SER lidos ja resolvem este poblema de sql injection

if (strlen(ereg("[(.#$%&*,;.!?)]", $usuario)) != 0) {
echo "<script>window.alert(\"Por razões de segurança você não pode usar estes caracters no usuário (.#$%&*,;.!?)!, tente novamente!\");</script>";
echo "<meta http-equiv='refresh' content='0;URL=index.php'>";
exit; }

quero ver alguem "burlar a segurança" com esta regra...

abraços a todos os companheiros do phpbrasil

Erro
publicado por rdgstc - 2005-11-14 09:15:58

tentei varias vezes mais infelizmente o erro é o mesmo:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\arquivos de programas\apache group\apache\htdocs\site\admin\principal.phpon line 19 ja mudei as variaveis, e nada! o q acontece?
Vi algo no seu codigo q não entendi, em vez de variavel $conc = $login.$senha;(verifica_sessao.php) não seria $cone = $login.$senha;? Valeu e tenha um bom feriado.

duvida sobre session
publicado por IGORFISIUFF - 2006-03-31 12:10:29

Gente eu estou com a seguinte dúvida. Por exemplo, eu tenho uma página que roda um script php de validação de usuários com sessions e no meu script tem uma linha tipo a desse artigo que é o session_destroy(); e eu fiquei em dúvida se por acaso um usuário se loga no sistema ai depois vem outro e se loga mas ai pra se logar, ele acessa o script que tem a linha destroy bom, em fim, o que eu quero saber é se um usuário pode fechar uma session que um outro abriu se ele rodar o script com session_destroy.
Bom, obrigado pela ajuda.

logout?
publicado por thifacco - 2006-07-19 04:18:29

Parabéns Italo! Mt bom o tutorial!

Só tenho dúvida quanto ao logout. Quando eu volto pra página de login e entro com outro usuário, a session continua gravada com o usuário anterior.

Como eu faço pra logar com outro usuário sem ter q fechar a janela????

ERROO
publicado por Fabio_J - 2007-05-15 09:21:00

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\sistema_historico\principal.php on line 8

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\sistema_historico\principal.php on line 8

O erro é na linha abaixo:
$logado = mysql_fetch_array(mysql_query($sql,$cone));

Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 2.155 segundos