Pergunta

<?php
class test_class {

        public function __construct() { 

        }
        public function doLogin($username,$password) {

            include("connection.php");

            $query = "SELECT *
                      FROM users
                      WHERE username = '".mysql_escape_string($username)."'
                      AND password = '".mysql_escape_string($password)."'";
            $result = mysql_fetch_array(mysql_query($query));
            if(!$result) {

            return 'no';
            }
            else 
                {
            return 'yes';
                }
            }


}
?>

Os trabalhos de código acima, mas um pouco preocupado se o seu seguro ou não.

Nota: Eu não estou usando o método POST, então eu tenho que recebê-lo como argumentos na função e eu não posso usar.

if (isset($_POST['username']) && isset($_POST['password']))
        {
        $username= $_POST['username'];
        $password= $_POST['password'];
Foi útil?

Solução

O código pode ser seguro, mas a implementação não é grande. Você nunca deve armazenar uma senha de autenticação como texto simples. Você deve sal e hash.

Eu poderia passar uma hora explicando o porquê, mas você faria melhor apenas ler este .

Outras dicas

A consulta em si parece seguro, mas se você usou uma interface DB que a ligação parâmetro suportado, como DOP ou Zend_Db, você não teria que examinar cada instrução SQL tão nervosa.

Além disso, as funções mysql-* são praticamente obsoleta; você deve olhar para as funções * mysqli- vez.

Como uma nota lateral estilística, não há nenhum ponto em um construtor vazio, e eu sugiro retornando boolean verdadeiro ou falso em vez de valores de cadeia.

Finalmente, como mencionado em outros lugares, armazenar senhas em texto puro é uma má idéia.

uhh .... você está armazenando uma senha de texto? Isso certamente não é seguro. A senha deve ser hash com um sal usando algo como sha256. Armazenar senhas em texto puro nunca é uma boa idéia.

No. Você não deve armazenar a senha cru em seu banco de dados. Armazená-lo hash (de preferência com um seu sal). Além disso, declarações preparadas são uma escolha melhor do que fugir. Veja este PHP DOP documentação . Como um benefício adicional (além de segurança), eles podem ser mais eficientes.

O código em si parece ok, mas o principal problema que vejo é que você está passando senhas em torno de texto simples.

É a conexão cliente-a-servidor seguro (ou seja, usando SSL) É a conexão de servidor para banco de dados seguro

Se em qualquer caso alguém pode sentar-se no tráfego de arame e relógio passando, então você tem um problema de segurança.

Se fosse comigo, eu definitivamente tem uma conexão SSL entre o cliente e servidor.

Eu tinha certeza que você estava guardando um hash da senha no banco de dados.

E eu alterar seu código para algo como

//Pseduo Code
SELECT * FROM Table where UserName = $username
Get Row Back
if(MD5Hash($password) == DataRow[Password])
   //Valid

Eu acho que é OK, no entanto, se eu estou preocupado com a segurança, eu armazenar a senha de "username" na variável e compará-lo fora da consulta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top