Jump to content

Dêm-me ideias lol


joxnas

Recommended Posts

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...

Link to comment
Share on other 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...

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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...

Link to comment
Share on other 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. 😉

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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")?

Link to comment
Share on other 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

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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??

Link to comment
Share on other sites

Eu sei, so que quanto mais compatibilidade tiver aquilo que eu ando a fazer ocmo os diferentes hosts.. melhor .. 🙂

Ja agora tou a pensar usar isto:

http://pt2.php.net/manual/pt_BR/function.mcrypt-encrypt.php

e depois para desincriptar:

http://pt2.php.net/manual/pt_BR/function.mcrypt-decrypt.php

Parece-te bem?

EDIT: ja agor apost 100 🙂 XD

Link to comment
Share on other 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.

Link to comment
Share on other 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...

Link to comment
Share on other 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.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.