2015-09-14 6 views
0

У меня есть этот код входа (я сознаю, что это действительно небезопасно).php-пароли в txt-файле как база данных

Как я могу хранить несколько паролей в TXT-файле?

<?php 

$passwords = file('pass.txt'); 


# Check for session timeout, else initiliaze time 
session_start(); 
if (isset($_SESSION['timeout'])) { 
    if ($_SESSION['timeout'] + 10 < time()) { 
     session_destroy(); } } 
else { 
    $_SESSION['pass']="" ; $_SESSION['timeout']=time(); } 

# Store POST data in session variables 
if (isset($_POST["pass"])) { 
    $_SESSION['pass']=hash('sha256',$_POST['pass']) ; } 

# Check Login Data. Password is hashed (SHA256). In this case it is 'admin'. 
$flag = 0; 
foreach ($passwords as $pass) { 
    if ($pass == $_SESSION['pass']) { 
     $flag = 1; 
    } 
} 

if ($flag == 1) { 
echo 'session';} 
else { 
    echo'<form method="POST" action=""><input type="password" name="pass"></form>';} 

?> 

Это pass.txt, от которого я хочу прочитать пароли

65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5 
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 
+0

Почему бы не сохранить их в базе данных, а не в формате .txt? Несомненно, хранение имеет больше смысла? –

+0

ОК, это было только потому, что я совершенно не знаком с данными. Не могли бы вы рассказать мне, как это сделать в sqlite3? – Kathlyn

+0

Я не могу сделать Lite, но я могу добавить ответ wth mysqli для php, если вам нравится? –

ответ

1

Начну с, да - вы очень правильно, что это небезопасно. Особенно, если пароли хранятся в txt-файле, доступном для Интернета.

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

Для простого текста, прочитать файл в массив

$passwords = file('path/to/file.txt');

Или включить файл PHP с массивом (который для данного примера хранится в массиве с именем $ пароли.

Затем установите флаг и запустить через массив проверки и заменить конечное состояние с одним, который проверяет флаг.

$flag = 0; 
foreach ($passwords as $pass) { 
    if ($pass == $_SESSION['pass']) { 
     $flag = 1; 
    } 
} 

if ($flag == 1) { 
echo 'session';} 
else { 
    echo'<form method="POST" action=""><input type="password" name="pass"></form>';} 
+0

Выглядит хорошо, поскольку он не работает, изменил вопрос для вас, чтобы увидеть, что я делаю. любая ошибка? – Kathlyn

1

лично я не рекомендую хранить пароль в .txt, но все же я могу помочь вам .. Вы хотите сохранить несколько паролей с помощью обработки вы можете сделать это с помощью функции JSon файл ..

function writeToFile($filename, $msg) 
{ 
    $msgArray=array(); 
    if(file_exists($filename)) 
     { 
     $arrMsg=json_decode(file_get_contents($filename),true); 
     foreach ($arrMsg as $ob) 
      { 
      array_push($msgArray,$ob); 
      } 
     unlink($filename); 
     } 
    array_push($msgArray,$msg); 
    $msgArrayJSON=json_encode($msgArray); 
    // open file 
    $fd = fopen($filename, "a"); 
    // write string 
    fwrite($fd, $msgArrayJSON. PHP_EOL); 
    // close file 
    fclose($fd); 
} 

и используя выше функции вы можете добавить пользователя как

writeToFile('user.json', array("username"=>$id,"password"=>$name)); 

Наконец, вы можете получить список пользователей из файла, как показано ниже

$user_array=json_decode(file_get_contents('user.json'),true); 
1

вы можете использовать PHP-функции FOPEN() и FWRITE(), как это:

<?php 
    /* the a is used to place the writer at the end of the file, w would place it 
    at the beginning of the file overwriting already stored data*/ 
    $myfile = fopen("newfile.txt", "a") or die("Unable to open file!"); 
    $txt = "My Mother\n"; 
    fwrite($myfile, $txt); 
    // or direct input 
    fwrite($myfile, "My Sister\n"); 
    fclose($myfile); 
?> 

Обратите внимание на \ n, чтобы перейти к следующей строке текстового файла.

Конечно, база данных будет лучшим способом, но если вы хотите сделать это с помощью текстовых файлов, я настоятельно рекомендую вам по-прежнему пытаться создать некоторую структуру. Посмотрите на XML или JSON.

+0

Sidenote: переключатель 'w' в' fopen ("newfile.txt", "w") 'перезапишет любое ранее написанное содержимое. Я почти уверен, что она хочет добавить. –

+0

Вы правы, я изменил его. Я быстро скопировал его, забыв о режиме. –

 Смежные вопросы

  • Нет связанных вопросов^_^