sha ('$ password') возврат с пустым набором - PullRequest
1 голос
/ 25 июня 2011

У меня две проблемы. проблема первая: Я пытаюсь создать форму регистрации, где пользователи могут зарегистрироваться на моем сайте. когда я запускаю эту инструкцию mysql, ошибка get dublicate entry found:

$sql "insert into users(username, password) values('$username, sha('$password'))";

Повторяющаяся запись 'da39a3ee5e6b4b0d3255bfef95601890afd80709' для ключа 'пароль' несмотря на то, что я несколько раз менял строку sha ('$ password'). пожалуйста, помогите.

else{
   include("databaseconnection.php");
   $databaseconnect = connect($host,$user,$password,$database)
      or die("couldnot connect to database serever.\n");
   $database_select = mysql_select_db($database,$databaseconnect)
      or die("could not select dabases.\n " .mysql_error());
   $query2 = "insert into company(username,password)
      values('$username',sha1('$password'))";
   $result2 = mysql_query($query2,$databaseconnect);
   echo "you have been registered as '$companyloginName' <br/>";
   header("Location:/index.php");

Мой php-скрипт для входа в систему выглядит следующим образом:

   $result ="select username, password form users where username ='$username' and password = sha('$password');
    if(mysql_num_rows($reuslt)==1){
   echo"welcome '$username";
    }

Ответы [ 3 ]

1 голос
/ 26 июня 2011

Во-первых, я бы СИЛЬНО посоветовал не использовать только MySQL sha() или PHP * sha1() для хэширования паролей. Это огромный риск для безопасности ваших пользователей, если ваша база данных взломана.

Пожалуйста, найдите время, чтобы прочитайте мой предыдущий ответ на тему хеширования пароля , чтобы должным образом защитить ваши данные.


Во-вторых, ваш код уязвим для атаки SQL-инъекцией . Используйте mysql_real_escape_string() для экранирования переменных, которые вы собираетесь поместить в свой запрос заранее.

$query2 = "insert into company(username,password)
  values('" . mysql_real_escape_string($username) .
          "', sha1('" . mysql_real_escape_string($password) . "'))";

В-третьих, ваша $password переменная перезаписывается вашим databaseconnection.php файлом.

include("databaseconnection.php");
$databaseconnect = connect($host,$user, $password ,$database);

Чтобы подчеркнуть ...

$databaseconnect = connect($host,$user,$password,$database);

Таким образом, $password, используемый позже в вашем запросе, по-прежнему содержит пароль для подключения к базе данных, а не пароль вашего пользователя.

Измените имя вашей переменной в databaseconnection.php или, что еще лучше, используйте массив для хранения всей конфигурации.

$dbConnectParams = array('host' => 'localhost'
                         'user' => 'myUser',
                         'pass' => 'myPassword',
                         'db' => 'myDB');

Затем измените свой код следующим образом:

include("databaseconnection.php");
$databaseconnect = mysql_connect($dbConnectParams['host'],
                           $dbConnectParams['user'],
                           $dbConnectParams['pass'],
                           $dbConnectParams['db']);

Поскольку вы уже передаете базу данных при вызове mysql_connect(), вам не нужно звонить mysql_select_db().

0 голосов
/ 25 июня 2011

Исходя из закомментированной строки, возможно, вы случайно использовали пароль подключения, заданный в файле «databaseconnection.php», а не пароль пользователя - вы не показываете, как инициализируете строку $ password.

Также обратите внимание на запятую в вашем sql, которая не должна быть там:

insert into company(username,password,)
                                     ^

Я не проверял, является ли это причиной, но вам, вероятно, следует избавиться от нее и протестировать ее снова.

Кроме того, серьезно подумайте о выражениях pdo / подготовленных для предотвращения SQL-инъекций, особенно если вы хотите вставить пароль из пользовательского ввода.

0 голосов
/ 25 июня 2011

da39a3ee5e6b4b0d3255bfef95601890afd80709 - это хэш sha1 пустой строки. Убедитесь, что вы действительно вставили пароль в свой запрос SQL, например, повторив запрос вместо отправки его на сервер SQL.

Редактировать С новой информацией, добавленной к вашему вопросу, отметьте эти две строки:

include("databaseconnection.php");
$databaseconnect = connect($host,$user,$password,$database)

Здесь $password - пароль, используемый для подключения к базе данных . Включение databaseconnection.php, вероятно, перезаписывает то, что было ранее в переменной $password.

Попробуйте echo $query2, и вы, вероятно, сами убедитесь, что в запросе SQL вообще нет пароля или что пароль в нем не совпадает с тем, который введен пользователем.

...