Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ryuunosuke

Segurança do site

Recommended Posts

Bem eu estou terminando meu primeiro projeto e vejo claramente que deve ter varias aberturas para ataques. Entao vamos la...

 

Quando eu sei que estou veraneável?

Existe um script menos seguro que o outro? Algo que faça um script menos seguro?

Como posso me proteger de ddos? Pelo menos os mais fracos...

Quais os erros de proteção a ser corrigidos?

 

Nao consegui fazer o phpmailer funcionar então achei esse script:

$destino = $email88;
	$assunto = "Suporte";
	$headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: retgr <suporte@retgr>';
	$enviaremail = mail($destino, $assunto, $arquivo, $headers);
	if($enviaremail){

Por algum motivo nao sinto que ele seja seguro ja que serve justamente para recuperar senha de usuário. Ele mostra o servidor da minha hospedagem por exemplo. (srv16.main-hosting.eu)

 

(O usuário preenche um formulário com usuário e mail da conta se estiver certo eu envio um email com um código aleatório gerado e coloco ele na db em md5. Em seguida ele preenche outro formulário que pede o código usuário e-mail e senha nova.)

 

Nos meus scripts estou usando:

@$_GET['go'] == 
$_SESSION['user'] = $user; 

De alguma forma isso pode ser prejudicial?

 

Tentei fazer aquele treco de 'or''=' no meu site mas nao deu msm não tendo feito proteção anti mysqlinject alguma. Mas de quais formas eu devo me proteger contra esse metodo?

 

E o mais importante... Ja posso começar a beber cafe? =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu sei que estou veraneável?

vulnerável! :lol:

 

Existe um script menos seguro que o outro? Algo que faça um script menos seguro?

Sim, claro. Existem muitas coisas que podem deixar um sistema vulnerável

 

 

Como posso me proteger de ddos? Pelo menos os mais fracos...

Isso está ligado mais à sua infra, configurações de rede, roteadores, firewall etc

 

Quais os erros de proteção a ser corrigidos?

Uma das coisas mais importantes é se proteger contra SQL Injection

 

 

Por algum motivo nao sinto que ele seja seguro ja que serve justamente para recuperar senha de usuário. Ele mostra o servidor da minha hospedagem por exemplo. (srv16.main-hosting.eu)[/size]

O nome do servidor e o IP não reduzem sua Segurança. Qualquer ping/traceroute mostra esses dados, de qualquer site. E não há nada errado nisso.

 

 

Não entendi por que mail() seria mais inseguro que PHPMailer.

Pode ser menor eficaz, pois ele não usa SMTP autenticado. Por isso recomendo sempre usar PHPMailer em vez de mail()

 

 

E o mais importante... Ja posso começar a beber cafe? =D

Só se for puro e sem açúcar :)

 

 

Veja minhas 15 dias de PHP: http://www.ultimatephp.com.br/guia/

Compartilhar este post


Link para o post
Compartilhar em outros sites

5. A Solução Ideal: Prepared Statements

Existe uma forma ideal de resolver o problema de SQL Injection: Prepared Statements.

O que são Prepared Statements?

Prepared Statements são úteis para executar uma mesma consulta diversas vezes, com parâmetros distintos, de forma eficiente.

Porém também há outra utilidade: filtragem nativa de consultas, a fim de evitar SQL Injection. Isso dá mais segurança ao seu sistema.

Nesse tipo de consulta, os parâmetros não são enviados diretamente na consulta. Eles são enviados em um “pacote” separado ao SGBD. O SGBD, por sua vez, é quem faz a associação entre string SQL e parâmetros.

Em outras palavras, não vamos colocar variáveis diretamente na consulta.

É possível usar Prepared Statements com as extensões mais recentes do PHP, como a MySQLi. Recomendo utilizar PDO, que permite abstrair o banco de dados. Leia mais sobre isso neste meu artigo sobre PDO e MySQL.

 

Nao entendo o Prepared Statements no caso seria o próprio PDO?

 

Eu dei uma pequena lida em objetos classes e métodos mas ainda não entendo completamente... Como por exemplo:

 

$search = $_GET['search'];
$sql = "SELECT * FROM programadores WHERE site LIKE '%" . $search . "%'";
$result = $PDO->query( $sql );
$rows = $result->fetchAll( PDO::FETCH_ASSOC );

Nesse exemplo (http://rberaldo.com.br/pdo-mysql) onde estao as classes objetos metodos?

 

 

Se eu usar PDO vou me livrar de sqlinject?

 

E facil migrar de mysql pra PDO? (Lembrando que eu sou noob.)

 

Uso o mysql que esta morrendo... Entao o mysqli seria parte do PDO? Eu preciso atualizar primeiro para mysqli antes de passar para PDO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prepared Statements É independente de PDO. É aplicada tanto com PDO ou MySQLi. MySQLi é uma coisa, PDO é outra.

 

Se você utilizar o PDO ou MySQLi, desde que aplique o prepared statements, você irá se livrar do sql injection. Lembrando que é preciso também fazer o tratamento de entrada de dados. O próprio PDO já é uma classe com seus objetos e métodos, como no exemplo acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o Alerte disse, MySQLi é uma coisa e PDO é outra. São duas classes diferentes do PHP (nativas, ou seja, os códigos delas estão no código-fonte do PHP)

 

A principal vantagem do PDO sobre o MySQLi é que PDO funciona com diversos SGBDs, não apenas MySQL. Por isso recomendo PDO. Se um dia precisar migrar de SGBD, será bem mais simples.

 

Não precisa migrar pra MySQLi e depois pra PDO. São coisas diferentes. Você usa a que achar melhor para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.