Bitcoin Forum
November 18, 2024, 08:57:03 AM *
News: Check out the artwork 1Dq created to commemorate this forum's 15th anniversary
 
   Home   Help Search Login Register More  
Pages: [1] 2 »  All
  Print  
Author Topic: Codigo Fonte em PHP de um projecto de um site de Trafic Exchange  (Read 4249 times)
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 11, 2016, 09:29:36 PM
Last edit: March 17, 2016, 07:00:25 PM by ZenJB
 #1

Olá Mundo,

Eu estou desenvolvendo um site de Trafic Exchange feito em PHP.
No inicio ia fazer host do site mas o meu pc deu peça
Então, tornei o site OpenSource para que qualquer um que queira começar um site deste tipo possa ter um grande impulso.
Fiz upload de todos os arquivos no GitHub.

Website oficial deste script: http://zenjb.tk/project/TXZone/


REQUISITOS
- Apache
- MySQL
- Msmtp
- PHP V5.5.13
- Phpmyadmin
- 2 Contas no BlockChain

Como configurar o site?
1> Configure o Apache, MySQL, msmtp e o PHP
2> Crie 2 contas carteira no Blockchain
3> Ative o API em ambos as carteiras do BlockChain
4> Crie uma base de dados no MySQL chamada txzone atraves do phpmyadmin
5> Importar o arquivo database.xml para a base da dados txzone
6> Configure o ficheiro db.php em /scripts
7> Autorize o site a  acessar o API de suas carteiras

Como resetar as tarefas concluidas pelos usuários (deve ser feito diariamente e a uma hora fixa para permitir que os usuário façam as suas tarefas no dia seguinte):
1> Em phpmyadmin vá a txzone -> tasks e apague os dados

Como activar os levantamentos de Bitcoin:
1> Transfira os Bitcoin da conta onde são depositados para a conta que vai enviar Bitcoin para o utilizador
2> Em phpmyadmin abra a base de dados txzone -> webcontrol e defina o valor de pagamento 0-1

Atenção:
Quando atualizar a versão do script é possivel que perca os dados na base de dados. Portanto, certifique-se de fazer o backup de tudo antes de atualizar!


Se faltar alguma coisa ou quiser que adicione alguma funcionalidade, por favor mande mensagem privada

Funcionalidade por acrescentar:
-> Painel Administrativo
-> Oportunidade de escolher onde vai guardar as Bitcoins
-> Anti SQL-Injection em todas as páginas
-> Encriptação do código fonte
-> Compatibilidade com MySQL e MySQLi
-> Compatibilidade com todas as versões do PHP
-> Pagina para recuperação da palavra passe
-> Escolha do método de levantamento dos Bitcoins ( Via FaucetBox ou Via Instantânea )
-> Envio automático de Email ao comprador dos anúncios quando os anúncios já foram todos vistos
-> Estatísticas de visualizações dos anúncios (Número de anúncios vistos por    dia ou por mês, Anúncios comprados)
-> "Ganhos no Site" - Comparação do número de anúncios comprados com o numero de anúncios vistos
-> Sistema de pagamentos de Bitcoin totalmente Automatizado
-> Outros idiomas (Português (Portugal), Francês, Espanhol)


Por cada 0,2542 BTC doados, vou lançar um update ao script
Montante já recebido: 0.00005500 BTC

 Se você usar este código-fonte para outros fins, por favor atribua-me os devidos créditos


Link do codigo fonte:
http://zenjb.tk/

Email privado:
0zenjb0@gmail.com

Disclaimer:
I am not responsible if you or someone loses Bitcoins, or if you get hacked dued to the lack of security or dued to another thing that may happen.
This is a project in development. So, you will experience bugs, lack of feactures, and many other things...
USE IT AT YOUR OWN RISK.
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 11, 2016, 09:31:24 PM
 #2

Olá Mundo,

Eu estou desenvolvendo um site PTC feito em PHP.
No inicio ia fazer host do site mas o meu pc deu peça
Então, tornei o site OpenSource para que qualquer um que queira começar um site deste tipo possa ter um grande impulso.
Fiz upload de todos os arquivos no GitHub.

Link do GitHub: https://github.com/ZenJB/TXZone/

REQUISITOS
- Apache
- MySQL
- Msmtp
- V5.5.13 PHP
- Phpmyadmin
- 2 Contas no [Suspicious link removed]o configurar o site?
1> Configure o Apache, MySQL, msmtp e o PHP
2> Crie 2 contas carteira no Blockchain
3> Ative o API em ambos as carteiras do BlockChain
4> Crie uma base de dados no MySQL chamada txzone atraves do phpmyadmin
5> Importar o arquivo database.xml para a base da dados txzone
6> COnfigure o ficheiro db.php em /scripts
7> Autorize o site a  acessar o API de suas carteiras

Como resetar as tarefas concluidas pelos usuários (deve ser feito diariamente e a uma hora fixa para permitir que os usuário façam as suas tarefas no dia seguinte):
1> Em phpmyadmin vá a txzone -> tasks e apague os dados

Como activar os levantamentos de Bitcoin:
1> Em phpmyadmin abra a base de dados txzone -> webcontrol e defina o valor de pagamento 0-1

Se faltar alguma coisa, por favor responda a este tópico

Se você usar este código-fonte por favor atribua-me os devidos créditos [/ b]

Se você quiser me comprar um café, faça um donativo Smiley

Endereço Bitcoin: 1EWhnNyoLpMHvKNETyRCn95tDaJmsPjuSX

Disclaimer: [/ b]
I am not responsible if you or someone loses Bitcoins, or if you get hacked dued to the lack of security or dued to another thing that may happen.
This is a project in development. So, you will experience bugs, lack of feactures, and many other things...
USE IT AT YOUR OWN RISK.


tire os espaços entre a "/" e o "b" nos negritos, ficou todo deformado o post.

Advertise Here - PM for more info!
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 11, 2016, 09:46:14 PM
 #3

Obrigado já tirei o espaços
 Deve ter sido ao traduzir que ficou com os espaços :p
Nixtren
Member
**
Offline Offline

Activity: 78
Merit: 10


View Profile WWW
January 11, 2016, 10:34:04 PM
 #4

Parabéns pela iniciativa Smiley

Geralmente quando vejo um novo projeto open-source gosto sempre de ir espreitar o código em busca de falhas de segurança. Fiz uma análise preliminar e aqui está uma vulnerabilidade:

  • Vulnerabilidade SQL Injection em TXZone/login/index.php. O user input não é sanitizado pelo script. Uma pessoa maliciosa poderia esvaziar a tabela de membros fazendo login com o username "'; TRUNCATE TABLE members; --". Recomendo você pesquisar mais sobre o assunto.

Qualquer dúvida é só perguntar Wink

P.S: E já agora, quem me quiser contratar está à vontade Grin
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 11, 2016, 10:41:40 PM
Last edit: January 11, 2016, 11:01:27 PM by ZenJB
 #5

Muito obrigado por detectar essa vulnerabilidade
Vou já reparar essa vulnerabilidade agora  Smiley
Paredao
Legendary
*
Offline Offline

Activity: 3514
Merit: 1664


Buy on Amazon with Crypto


View Profile
January 12, 2016, 03:31:44 PM
 #6

Olá Mundo,

Eu estou desenvolvendo um site PTC feito em PHP.
No inicio ia fazer host do site mas o meu pc deu peça
Então, tornei o site OpenSource para que qualquer um que queira começar um site deste tipo possa ter um grande impulso.
Fiz upload de todos os arquivos no GitHub.

Link do GitHub: http://zenjb.github.io/TXZone/

REQUISITOS
- Apache
- MySQL
- Msmtp
- V5.5.13 PHP
- Phpmyadmin
- 2 Contas no [Suspicious link removed]o configurar o site?
1> Configure o Apache, MySQL, msmtp e o PHP
2> Crie 2 contas carteira no Blockchain
3> Ative o API em ambos as carteiras do BlockChain
4> Crie uma base de dados no MySQL chamada txzone atraves do phpmyadmin
5> Importar o arquivo database.xml para a base da dados txzone
6> COnfigure o ficheiro db.php em /scripts
7> Autorize o site a  acessar o API de suas carteiras

Como resetar as tarefas concluidas pelos usuários (deve ser feito diariamente e a uma hora fixa para permitir que os usuário façam as suas tarefas no dia seguinte):
1> Em phpmyadmin vá a txzone -> tasks e apague os dados

Como activar os levantamentos de Bitcoin:
1> Em phpmyadmin abra a base de dados txzone -> webcontrol e defina o valor de pagamento 0-1

Se faltar alguma coisa, por favor responda a este tópico

Se você usar este código-fonte por favor atribua-me os devidos créditos

Se você quiser me comprar um café, faça um donativo Smiley

Endereço Bitcoin: 1EWhnNyoLpMHvKNETyRCn95tDaJmsPjuSX

Disclaimer:
I am not responsible if you or someone loses Bitcoins, or if you get hacked dued to the lack of security or dued to another thing that may happen.
This is a project in development. So, you will experience bugs, lack of feactures, and many other things...
USE IT AT YOUR OWN RISK.


Legal o seu projeto. Pena que as fees dos Bitcoins arrebentam com qualquer projeto que envolva micro-pagamentos. É uma pena.


.....Zellix.com.....
.
▄████████████████████
███████████████▓█████████
████████████▓███████████
▀█████████▓████████████▀
░░░░░░░░░▄████████████▀
░░░░░░░▄████████████▀
░░░░░▄████████████▀
░░░▄████████████▀
▄████████████▓████████
████████████▓████████████
██████████▓██████████████
█████▓██████████████▀

.....Buy on Amazon with Crypto.....
▄▄▄▄▄
▀▀███
░░▀███
░░░██████████████████████
░░░██████████████████████
░░░█████████████████████
░░░░████████████████████
░░░░███████████████████
░░░░▀█████████████████▀
░░░░░░▄▄▄░░░░░░░░▄▄▄
░░░░░█████ ░░░░░█████
░░░░░▀███▀░░░░░░▀███▀

.....Sign Up Now.....
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 18, 2016, 06:45:12 PM
 #7

Update 1:
-> Implementado Anti SQL-Injection
-> Paginas Login e Register agora têm Protecção Anti SQL-Injection
-> Palavra passe encriptada três vezes usando MD5
dive
Full Member
***
Offline Offline

Activity: 194
Merit: 180


View Profile
January 18, 2016, 07:27:17 PM
 #8

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.
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 18, 2016, 09:00:51 PM
 #9

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?
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 18, 2016, 09:30:26 PM
 #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).

Advertise Here - PM for more info!
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 18, 2016, 09:35:28 PM
 #11

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

Advertise Here - PM for more info!
dive
Full Member
***
Offline Offline

Activity: 194
Merit: 180


View Profile
January 18, 2016, 10:22:52 PM
 #12

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.
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 18, 2016, 10:30:22 PM
 #13

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

Advertise Here - PM for more info!
filipwx
Sr. Member
****
Offline Offline

Activity: 518
Merit: 250



View Profile
January 19, 2016, 04:16:24 AM
 #14

eu já iria passar um scan de vul no site mais o amigo ja se adiantou a mim rsrsrsrs
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 19, 2016, 04:53:08 PM
 #15

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?
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 19, 2016, 05:37:46 PM
 #16

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.

Advertise Here - PM for more info!
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 19, 2016, 10:54:03 PM
 #17

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?
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 20, 2016, 12:05:55 AM
 #18

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.

Advertise Here - PM for more info!
ZenJB (OP)
Member
**
Offline Offline

Activity: 98
Merit: 10


View Profile
January 20, 2016, 10:42:55 AM
 #19

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?
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
January 20, 2016, 12:22:46 PM
 #20

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

Advertise Here - PM for more info!
Pages: [1] 2 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!