PHP Password Securing - PullRequest
       0

PHP Password Securing

2 голосов
/ 11 августа 2011

У меня есть следующий фрагмент кода PHP:

<?php
session_start();

$data=array("user1"=>array("url"=>"file1.php","password"=>"pass1"),
"user2"=>array("url"=>"file2.php","password"=>"pass2"));

if(isset($_POST['username']) && isset($_POST['password'])) {
    if($data[$_POST['username']]['password'] == $_POST['password']) {
        $_SESSION['username'] = $_POST['username'] . " " . $_POST['password'];
        header('Location: ' . $data[$_POST['username']]['url']);
    } else {
        login('Wrong user name or password. <br>');
    }
} else {
    login();
}
?>

Я бы хотел, чтобы массив $ data = обрабатывался из другого файла, чтобы он был немного более безопасным. Как бы я это сделал? Есть идеи?

Ответы [ 4 ]

1 голос
/ 11 августа 2011

data.php:

<?php

$data = array(.... user/password data here ...);

login.php:

<?php

include('data.php');

... process login as usual

Это не более "безопасно", чем ваша версия, поскольку у них обоих все еще хранятся паролив незашифрованном виде, и любой, кто имеет доступ к веб-серверу на уровне файлов, сможет украсть «пользовательскую» базу данных, даже не моргнув.

Если вы настаиваете на этом методе, хотя бы поместите файл «data.php»где-то за пределами корня документа вашего сайта, чтобы он не находился в зоне, легко доступной для удаленных веб-пользователей.

0 голосов
/ 11 августа 2011

Я хотел бы расширить ответ Марка Б.

Хранение паролей в виде простого текста никогда не является хорошей идеей, а хранение паролей в данных SESSION - это плохая практика, которая также не будет постоянной.

Вот ссылка на некоторые заметки, которые я сделал, когда узнал об аутентификации пользователей с помощью php.

http://pastebin.com/sFmBJda1

Но вкратце, вам нужно хэшировать и хранить где-нибудь хешированные значения в базе данных. Даже если это не настоящая база данных. Хранить хешированные значения в текстовом файле, который вы можете анализировать, лучше, чем хранить простые текстовые пароли.

Просто убедитесь, что, когда пришло время для аутентификации пользователя, вы хэшируете ввод его пароля так же, как вы хэшируете пароли, а затем сравниваете его с таблицей / списком паролей, которые вы сохранили.

0 голосов
/ 11 августа 2011

Вы на правильном пути, когда говорите, что должны хранить пароль в другом месте. Я бы порекомендовал базу данных, но если вы должны использовать файл, то вы можете просто прочитать файл в начале вашего PHP-файла.

Настоящая проблема безопасности заключается в том, что вы храните пароли в незашифрованном виде. Если кто-то завладеет вашим паролем, он сможет увидеть пароли как есть. Это очень опасно. Вы должны использовать методы, известные как хеширование и соление :

Когда пользователь регистрирует пароль, вы хешируете комбинацию пароля и уникальной для пользователя случайной строки, известной как соль. Хеширование является односторонней функцией, поэтому вы получаете строку, которая не может быть возвращена к исходному паролю, но все еще является ее «отпечатком». Затем вы сохраняете этот «отпечаток пальца» и соответствующую соль в базе данных.

Когда предпринята попытка входа в систему, вы вычисляете хеш аналогичным образом и смотрите, совпадают ли хэши. Таким образом, вы никогда не сохраняете пароль в незашифрованном виде.

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

Для получения дополнительной информации по этой теме обратитесь к http://codahale.com/how-to-safely-store-a-password/.

0 голосов
/ 11 августа 2011

Это неправильный способ защиты контента. Никогда не следует хранить пароль в сеансе, поскольку он может быть скомпрометирован. Вот учебник по входу в систему:

http://www.phpeasystep.com/phptu/6.html

и вот обзор безопасности php:

http://www.phpfreaks.com/tutorial/php-security

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