• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joxnas

Dêm-me ideias lol

25 mensagens neste tópico

Imaginem que queriam criar um diário online.

Ou seja um sitio online onde nos registamos e escrevemos coisas que só nos podemos ler tal como num diário.

Sabem fazer a pagina de registo de users, tudo bem, cada user só pode ver aquilo que ele escreveu, tudo bem,os dados ficam armazenados numa base de dados mysql , facil até agora.

Mas voces são os administradores do diário online e como tal podem ver tudo o que as pessoas registadas escreveram, basta ir consultar a base de dados né??

Como vocês são pessoas honestas e tal, querem criar isto de forma a que nem voces consigam ver o que as outras pessoas escreveram.

Eu preciso de tal coisa...

Já tive a pensar numa maneira..so que ... é esquesita..

Tipo teria de eu proprio criar uma função de codificanço e outra de descodificanço do codigo gerado pela função de codificanço.

Em que o método de codificação seria dependente de um valor numerico de 4 numeros que o utilizador introduzisse quando fizesse o registo. Depois de cada vez que o user quisesse ler o seu diario teria de re-introduzir o valor numerico que inseriu aquando ao seu registo. O valor re-introduzido ia ser utilizado pela função de desocidificanço para descodificar da mesma maneira que a função de codificanço codificou so que na ordem inversa...

Exemplificando:

No meu registo o meu numero de codificanço é 1234:

Depois um dia eu fui ao meu diario e escrevi:

No campo do conteudo:

Ah um dia quero ser grande.

No campo do numero de codigo:

1234

Carrego lá no butaozinho GUARDAR NO DIARIO!

O php analiza e ve se o md5(1234) é igual ao md5 do numero que eu introduzi no registo e se for a minha funçao começava a codificar o dito texto:

E como ia serr este codificanço da minha função? (Tou aberto a propostas... Eu tenho uma um coto noob..:

Faz de conta que o primeiro valor de codigo serviria para fazer com que todas as posições de carateres na tabela ASCII subisse $primeirovalor posições na tablea ou seja. Ficava:

Bi!vn!ejb!rvfsp!tfs!hsboef/

Os outros algarismos inda tou a pensar para que serviriam.

Depois de tar codificado, ficava guardado na base de dados. Para descodificar era o mesmo processo em ordem inversa...

O que eu quero saber é se existe alguma maneira mais facil de fazer isto e eu tou aqui a pensar para nada...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema e teres de coficar e descodificar. Talvez o base64_encode faça o que queres.

base64_encode ( string $data )

base64_decode ( string $data [, bool $strict] )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o base 64 nao resolve o problema. porque qualquer pessoa pode fazer encode e decode. Se eu tenho conteudo na base de dados codificado por base 64, sendo eu o admin e percebendo de php posso perfeitamente fazer decoding... com base64_decode()

Eu precisava era de uma função que codificasse tendo em conta dois parametros a string com o conteudo e a string com tipo um codigo de 4 numeros sei lá.

tipo imagina esta função:

$lol="Conteudo que so o user que escreveu poderá ver, nem mesmo o admin conseguirá muahaha!";
$codigo="4242"; /*Muah so quem souber o meu codigo é que alguma vez poderá ver o k escrevi! NEm o admin consguirá saber ! */

$omgweirdcode=matrixencode($lol, $code);
echo $omgweirdcode;//Output SEria por exemplo:"eiohc iwjpqm wjqpdjqpdfa"

$wrongdecoded=matrixdecode($omgweirdcode, '3213');/*Descodificaste sem utilizar o codigo de codificação correcto?? MUAHA espera e verás*/
echo $wrongdecoded;//Output Seria por exemplo: "vlaboi wijcqwp jowq djfjp";

$rightdecoded=matrixdecode($omgweirdcode,'4242');/*Ah agora sim, vai ficar bem descodificado porque o alogaritmo de codificação vai descodificar seguindo o mesmo metodo que utilizaou para codificar! */

echo $rightdecoded;//Output Seria: "Conteudo que so o user que escreveu poderá ver, nem mesmo o admin conseguirá muahaha!";

Antes de ter o trabalho de criar uma função destas preciso de saber se não existe já uma parecida...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tou a perceber, e que tal se fizeres, encode e depois adicionares esse sal, que querers á string do encode e depois fizeres encode novamente? Resulta pa!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas com o sal definido pelo próprio utilizador, não previamente pelo programador

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres tornar isso realmente seguro, usa uma função de hashing para a password do user e usa outra função de hashing para usares o hash resultante como chave de encriptação e desencriptação, e não guardas este ultimo hash em lado nenhum.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LURST e skin:

Como assim?

$sal='4242';

$lol="Conteudo que so o user que escreveu poderá ver, nem mesmo o admin conseguirá muahaha!";

$code1=base64_encode($lol);

$code2=$code1.$sal;

$code3=base64_encode($code2);

Assim? Mas isso isa dar ao mesmo.. Qualquer pessoa pa descodificar faria base64_decode($code3) depois tirava os ultimos 4 numeros e fazia outra vez decode.. né? Se tiver a interpretar mal digam sff

djthryrax:

normalmente eu ponho as passes dos users em md5, por isso isso ja ta feito.Agora usar algo como chave de encriptação ou como chave de desencriptação.. não sei como fazer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A chave de encriptação seria o hash MD5, mas como os admins teriam acesso à db, podiam pegar no hash da password e f*der a privacidade. Por isso, usas um hash SHA-256, por exemplo, como a chave de encriptação num algoritmo de encriptação. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sha-256 ?? só conheço sha1 para php..

Alem disso qual é a difernça de ter uma ou outra hash se tem ambas as mesmas propriedades(acho eu, que ambas não sao descodificaveis)

E n devo tar a perceber muito bem o que queres dizer

existe algum funcao de encriptação deste tipo? ou tenho de ser eu a criar a funcao com o algoritmo de encriptaçao?

encode("$string","$chave_de_encriptaçao")?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um algoritmo de encriptação é um algoritmo que dando uma chave, podes encriptar e voltar a desencriptar, sem fazer qualquer tipo de ataque. Um algoritmo de hashing é um algoritmo one-way, ou seja, não podes recuperar o original sem fazeres ataques para explorar falhas do algoritmo. O que eu estava a dizer era para usares o output de um algoritmo de hashing diferente do que estás a usar para guardar a password (dificultando o trabalho a quem quiser desencriptar o texto) como chave de encriptação do algoritmo de encriptação.

Tanto SHA-1 como MD5 são algoritmos de hashing inseguros uma vez que podem ser quebrados recorrendo a esse tipo de ataques.

Em relação a implementações de SHA-256 em PHP, têm de existir, mesmo que não venham com o interpretador.

Para a encriptação, http://pt2.php.net/mcrypt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

POis eu sei.. algoritmos de hashing sao unidirecionais.. algoritmos de encriptação nao.

A minha dificuldade era encontrar um algoritmo de encriptação que encriptasse de maneira diferente consoante uma chave que lhe fosse dada.

depois so poderia ser desincriptado correctamente se a chave fosse a mesma da utilizada aquando à encriptação.Quanto ao armazenamento desta chave, isso ja tenho tudo organizado na minha cabeça lol(bem sei que esta chave nao poderia ficar na base de dados(pelo menos sem ser em hash) senao bastava o admin ir buscar a chave e pimba, desincriptava o que quisesse).

Esse link que tu me deste.. parece ter o que eu preciso.. Mas a tal  mcrypt library.. é frequente os hosts terem??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Duvido que todos a tenham, mas podes verificar isso com um simples phpinfo(); :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema não tem solução fácil ou bonita. Talvez a forma mais simples que me ocorre, com o compromisso de não ser muito prático, seria através da criação de um par de chaves por cada diário com uma password à escolha do utilizador (para o caso de necessitares de revogar o certificado). Assim em vez de utilizares uma autenticação baseada em username e password, terias uma autenticação com base na autenticidade das chaves e poderias utilizar também as mesmas chaves para encriptar/desencriptar o conteúdo dos diários.

EDIT: Com o inconveniente de o utilizador ter que enviar o certificado sempre que necessitasse de aceder ao diário. Este poderia ser guardado num cookie de sessão enquanto a sessão estiver viva.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema não tem solução fácil ou bonita. Talvez a forma mais simples que me ocorre, com o compromisso de não ser muito prático, seria através da criação de um par de chaves por cada diário com uma password à escolha do utilizador (para o caso de necessitares de revogar o certificado). Assim em vez de utilizares uma autenticação baseada em username e password, terias uma autenticação com base na autenticidade das chaves e poderias utilizar também as mesmas chaves para encriptar/desencriptar o conteúdo dos diários.

EDIT: Com o inconveniente de o utilizador ter que enviar o certificado sempre que necessitasse de aceder ao diário. Este poderia ser guardado num cookie de sessão enquanto a sessão estiver viva.

Eu sei, já tinha pensado nisso e já tenho isso tudo em conta... O problema é que nao ser possivel as pessoas editarem as suas chaves de encriptação e desencriptação porque isso ia implicar que todo o conteudo encriptado com certa chave fosse desicriptado e enriptado outra vez com outra chave diferente.. oras se tivermos a falar de dezenas de paginas escritas... txx...nem pensar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No limite, não tens safa possivel, porque como isto é tudo html há sempre uma altura, pelo menos antes da 1ª encriptação da password, em que podes sacar a password, basta quando o user envia a password para o site tu guardares numa outra tabela sem encriptação e podes aceder quando quiseres:).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol.. n pcebi o que quiseste dizer?

acho que nao tás bem no contexto.. já leste o prnincipio do post?

"envia a password para o site tu guardares numa outra tabela sem encriptação " Um apassword nao encriptada? tudo menos isso, n vez que basicamente a prioridade aqui é a privacidade?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O naoliveira tem em certa parte razão.

O que ele quis dizer foi, o utilizador quando escrever a password na página, na altura do post-back a password vai em plain-text. Quem quiser pode ver a password à vontade, é claro que que existem métodos para combater isso (SSL, TLS são os mais conhecidos), mas é um ponto inseguro na segurança.

Eu não sou nenhum perito em segurança, longe disso, não é uma área que me cative muito. Mas se fosse eu a fazer e quisesse o máximo de segurança, punha toda a acção de cifrar/decifrar do lado do cliente, ou seja, por javascript.

O utilizador escrevia o texto, na altura do submit era requerido ao utilizador preencher a password. Em javascript cifrava o texto e então é que fazia o post para o servidor, em que o servidor só via o texto já cifrado. Na altura de visualizar o texto, a página era demonstrada directamente com o texto cifrado para o utilizador, era posta a password e em javascript no momento decifrava o texto e mostrava ao utilizador.

Em nenhum ponto nenhum da comunicação haveria logs (principalmente no do lado webserver) ou falhas de segurança (acho eu) sendo o único ponto fraco o próprio PC do utilizador, como um keylogger, mas nisso não haveria volta a dar.

Agora se é necessário tanta coisa? Acho que não, um simples sistema de autenticação é suficiente na minha opinião.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O naoliveira tem em certa parte razão.

O que ele quis dizer foi, o utilizador quando escrever a password na página, na altura do post-back a password vai em plain-text. Quem quiser pode ver a password à vontade, é claro que que existem métodos para combater isso (SSL, TLS são os mais conhecidos), mas é um ponto inseguro na segurança.

Eu não sou nenhum perito em segurança, longe disso, não é uma área que me cative muito. Mas se fosse eu a fazer e quisesse o máximo de segurança, punha toda a acção de cifrar/decifrar do lado do cliente, ou seja, por javascript.

O utilizador escrevia o texto, na altura do submit era requerido ao utilizador preencher a password. Em javascript cifrava o texto e então é que fazia o post para o servidor, em que o servidor só via o texto já cifrado. Na altura de visualizar o texto, a página era demonstrada directamente com o texto cifrado para o utilizador, era posta a password e em javascript no momento decifrava o texto e mostrava ao utilizador.

Em nenhum ponto nenhum da comunicação haveria logs (principalmente no do lado webserver) ou falhas de segurança (acho eu) sendo o único ponto fraco o próprio PC do utilizador, como um keylogger, mas nisso não haveria volta a dar.

Agora se é necessário tanta coisa? Acho que não, um simples sistema de autenticação é suficiente na minha opinião.

Sim, mas mesmo assim, alguém podia ver a password cifrada, Depois era só olhar o método de cifragem, que ia estar visivel no código da página e gastar uns neurónios a descodificar, a nao ser que exista uma método de hash em javascript, esse método mesmo assim não ia ser totalmente seguro. Mesmo assim é muito melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas mesmo assim, alguém podia ver a password cifrada, Depois era só olhar o método de cifragem, que ia estar visivel no código da página e gastar uns neurónios a descodificar, a nao ser que exista uma método de hash em javascript, esse método mesmo assim não ia ser totalmente seguro. Mesmo assim é muito melhor.

Ninguem podia ver a password (cifrada ou não) porque a password nunca seria mandada com a página. A password só seria usada do lado do cliente na altura de cifrar o texto. A única forma de obteres a password seria por keylogger ou algo do genero a correr do lado do cliente. Porque a password nunca sairia do PC do utilizador.

Outra coisa de notar é que o facto de toda a cifragem/decifragem como seria em javascript seria muito mais lento do que por uma linguagem mais eficiente a correr do lado do servidor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, vou fazer isto como, sei.. afinal de contas isto nao sao arquivos da CIA ou da Interpol.. lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ois

O problema nao eh seres o admin, o problema eh seres o admin e nao respeitares a privacidade dos users.

Pq, mesmo fazendo duas funçoes 1 para encriptar e outra para desencriptar qq admin com conhecimento de php

vai ah db e depois usa a funçao para desencriptar para saber o texto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ois

A unica maneira k me esta a ocorrer para evitar isto eh essas funçoes serem em javascript, o user escreve o texto quando diz para

gravar eh lhe pedido um codigo e a funçao encriptar usa esse codigo para encriptar o texto, a informaçao eh enviada para o server ja encriptada.

Quando o user quiser ver de novo o texto da db envias o texto encriptado eh pedido o codigo ao cliente e a funçao desencriptar usa esse codigo.

Assim como nao tens o codigo em nenhum sitio da db nunca ias conseguir desencriptar o texto.

Problema eh k o user tinha de usar sempre o mm codigo, e se usa se diferentes tinha de se lembrar para quais textos o tinha feito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao nao é.. mcryptlibrary já foi falado no tópico. em que para desencriptar certo conteudo é preciso uma chave. E o unico sitio onde estaria guardada essa chave é no cérerbro de cada pessoa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora