Pages:
Author

Topic: Codigo Fonte em PHP de um projecto de um site de Trafic Exchange (Read 4000 times)

member
Activity: 98
Merit: 10
Update 3:
-> Adicionado opção para adicionar ou remover Administradores
member
Activity: 98
Merit: 10
Esse seu sistema anti injection se baseia na função sql_regcase() que é considerada obsoleta (deprecated) a partir do PHP 5.3.0 e foi removida do PHP 7. Ou seja, o script já não funciona no PHP 7.

Aquele arquivo json.php também não é necessário, basta usar as funções nativas json_encode()/json_decode().

Coitado do ZenJB Grin

A melhor solução é mesmo migrar para PDO ou MySQLi.

Já agora, se alguém estiver interessado, eu há alguns meses criei esta classe PHP para interagir com base de dados MySQL:
https://github.com/Nixtren/MySimplifiedSQL

Recentemente descobri outro projeto que tem o mesmo objetivo que a classe que criei, mas pelos vistos é mais completa:
http://medoo.in/

Depois há sempre a outra alternativa, que é usar PDO/MySQLi há moda tradicional, escrevendo as querys manualmente Smiley



Infelizmente não posso migrar para o PDO ou MySQLi pois tou limitado ao software usado para criar servidor PHP, Apache e MySQL no meu aparelho android (que é o aparelho que uso) Sad
member
Activity: 78
Merit: 10
Esse seu sistema anti injection se baseia na função sql_regcase() que é considerada obsoleta (deprecated) a partir do PHP 5.3.0 e foi removida do PHP 7. Ou seja, o script já não funciona no PHP 7.

Aquele arquivo json.php também não é necessário, basta usar as funções nativas json_encode()/json_decode().

Coitado do ZenJB Grin

A melhor solução é mesmo migrar para PDO ou MySQLi.

Já agora, se alguém estiver interessado, eu há alguns meses criei esta classe PHP para interagir com base de dados MySQL:
https://github.com/Nixtren/MySimplifiedSQL

Recentemente descobri outro projeto que tem o mesmo objetivo que a classe que criei, mas pelos vistos é mais completa:
http://medoo.in/

Depois há sempre a outra alternativa, que é usar PDO/MySQLi há moda tradicional, escrevendo as querys manualmente Smiley


sr. member
Activity: 427
Merit: 250
Esse seu sistema anti injection se baseia na função sql_regcase() que é considerada obsoleta (deprecated) a partir do PHP 5.3.0 e foi removida do PHP 7. Ou seja, o script já não funciona no PHP 7.

Aquele arquivo json.php também não é necessário, basta usar as funções nativas json_encode()/json_decode().
member
Activity: 98
Merit: 10
Update 2:
-> Sistema Anti SQL-Injection implementado em todos os scripts
-> Painel administrativo adicionado (Ainda incompleto)
sr. member
Activity: 518
Merit: 250
mais tem programas que quebras as senhas mole, testando automaticamente em uns 28 sites, entre eles uns sites russos bem legais :3
sr. member
Activity: 427
Merit: 250
Em vez da função md5 é melhor usar a função password_hash que é mais atual, melhor do que aninhar funções MD5 (vc pode inclusive configurar o "custo" nas opções da função).

Também hoje em dia é muito mais recomendado o uso da classe PDO que já elimina boa parte das chances de SQL injection: http://php.net/manual/en/intro.pdo.php
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
(...)
A palavra passe é processada da seguinte forma:
1) Pega na palavra passe e junta a um string e faz o hash disso
2) Pega no hash obtido anteriormente como se fosse uma string e junta a outra string diferente e faz o hash em md5 disso
3) Pega no hash obtido anteriormente como se fosse uma string e junta a outra string diferente e faz o hash em bcrypt disso
4) Pega no hash obtido anteriormente e salva na base de dados

Imaginemos que um utilizador ganha acesso a base de dados e obtem o hash obtido no passo 3
A minha pergunta era: Como é que ele sabe o hash obtido no passo 2? Não tem de passar pelo hash obtido no passo 3 primeiro?

Nesse caso você está usando a forma que eu dei como exemplo de ser mais segura. Você está acrescentando informação a cada passo:

(...)
Se quiser aumentar a segurança o que pode fazer é concatenar a senha novamente na hash antes de fazer  o segundo passo:

HASH(P) = g(P || h(P))

(onde || é o operador de concatenação de strings).

Note que isso só funciona se essa string diferente for desconhecida do atacante.

Se a string for conhecida (mesmo que variável), um atacante que quebrar o md5 não precisa de brute force. Só precisa calcular bcrypt(string || md5_quebrado).

Se você está dizendo que o atacante demoraria mais tempo para fazer um ataque de força bruta, lembre que fazer um ataque de força bruta sobre MD5 gastaria mais tempo que a idade do universo, então dificultar ataques de força bruta é perda de tempo. Estamos falando de caso a segurança do md5 seja quebrada.
member
Activity: 98
Merit: 10
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
Claro que sim mas caso um utilizador ganhe acesso ao hash da palavra passe (seja por SQL-Injection ou de outra forma) so tera acesso ao "hash final". Ele nao tera que fazer brute force nesse (Neste exemplo o hash feito pelo bcrypt) para obter o outro hash juntado a uma string para  depois fazer brute force no outro hash feito pelo md5?

Não, ele só precisa fazer bruteforce no md5, o bcrypt decorre naturalmente.
Como e q ele sabe o hash feito pelo md5?

fazendo o bruteforce. Não entendi a pergunta.
A palavra passe é processada da seguinte forma:
1) Pega na palavra passe e junta a um string e faz o hash disso
2) Pega no hash obtido anteriormente como se fosse uma string e junta a outra string diferente e faz o hash em md5 disso
3) Pega no hash obtido anteriormente como se fosse uma string e junta a outra string diferente e faz o hash em bcrypt disso
4) Pega no hash obtido anteriormente e salva na base de dados

Imaginemos que um utilizador ganha acesso a base de dados e obtem o hash obtido no passo 3
A minha pergunta era: Como é que ele sabe o hash obtido no passo 2? Não tem de passar pelo hash obtido no passo 3 primeiro?
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
Claro que sim mas caso um utilizador ganhe acesso ao hash da palavra passe (seja por SQL-Injection ou de outra forma) so tera acesso ao "hash final". Ele nao tera que fazer brute force nesse (Neste exemplo o hash feito pelo bcrypt) para obter o outro hash juntado a uma string para  depois fazer brute force no outro hash feito pelo md5?

Não, ele só precisa fazer bruteforce no md5, o bcrypt decorre naturalmente.
Como e q ele sabe o hash feito pelo md5?

fazendo o bruteforce. Não entendi a pergunta.
member
Activity: 98
Merit: 10
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
Claro que sim mas caso um utilizador ganhe acesso ao hash da palavra passe (seja por SQL-Injection ou de outra forma) so tera acesso ao "hash final". Ele nao tera que fazer brute force nesse (Neste exemplo o hash feito pelo bcrypt) para obter o outro hash juntado a uma string para  depois fazer brute force no outro hash feito pelo md5?

Não, ele só precisa fazer bruteforce no md5, o bcrypt decorre naturalmente.
Como e q ele sabe o hash feito pelo md5?
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
Claro que sim mas caso um utilizador ganhe acesso ao hash da palavra passe (seja por SQL-Injection ou de outra forma) so tera acesso ao "hash final". Ele nao tera que fazer brute force nesse (Neste exemplo o hash feito pelo bcrypt) para obter o outro hash juntado a uma string para  depois fazer brute force no outro hash feito pelo md5?

Não, ele só precisa fazer bruteforce no md5, o bcrypt decorre naturalmente.
member
Activity: 98
Merit: 10
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
Claro que sim mas caso um utilizador ganhe acesso ao hash da palavra passe (seja por SQL-Injection ou de outra forma) so tera acesso ao "hash final". Ele nao tera que fazer brute force nesse (Neste exemplo o hash feito pelo bcrypt) para obter o outro hash juntado a uma string para  depois fazer brute force no outro hash feito pelo md5?
sr. member
Activity: 518
Merit: 250
eu já iria passar um scan de vul no site mais o amigo ja se adiantou a mim rsrsrsrs
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).

Fui pesquisar mais e você tá certo girino. Não diminui, mas também não aumenta a segurança.

Se quiser aumentar a segurança o que pode fazer é concatenar a senha novamente na hash antes de fazer  o segundo passo:

HASH(P) = g(P || h(P))

(onde || é o operador de concatenação de strings).
full member
Activity: 194
Merit: 179
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).

Fui pesquisar mais e você tá certo girino. Não diminui, mas também não aumenta a segurança.
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
(...)
MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).

Entrando em mais detalhes pra quem for curioso. A segurança de uma hash está em garantir que é dificil encontrar duas senhas P e P' tal que:

HASH(P) = HASH(P').

Se eu encadeio duas hashes g() e h() da seguinte forma:

HASH(P) = g(h(P))

Então Se existe P' tal que

h(P) = h(P')

Temos que:

HASH(P) = g(h(P)) = g(h(P')) = HASH(P').

Ou seja, se a segurança de h() for comprometida, a segurança de toda a sequencia está comprometida.
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?

Náo, a segurança de uma sequencia de hashes é igual a segurança da m=primeira hash (no caso, o md5).
member
Activity: 98
Merit: 10
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.


MD5 não é um mecanismo de encryptação mas sim um mecanismo para gerar hashes tal como o bcrypt é  Tongue
Surgiu agora uma duvida ao ver o seu post. Se eu usar o bcrypt em cima do MD5 será que aumenta a segurança?
full member
Activity: 194
Merit: 179
Update 1:
-> Palavra passe encriptada três vezes usando MD5

A cada novo hash MD5 você está aumentando a probabilidade de collision, reduzindo a segurança da senha.

E MD5 não é um bom mecanismo de encriptar senhas pela facilidade de se fazer brute force. Use bcrypt.
Pages:
Jump to: