-1

Ich habe eine Anwendung, die ganze Datenbank im. SQL-Format mit PHP-Code exportiert, aber diese (.SQL) -Datei ist für andere leicht zugänglich. Ich möchte nicht, dass andere auf diese Datei zugreifen. Wie kann ich das verhindern? Ich meine, wie kann ich diese exportierte Datei mit einem Passwort schützen? Und ich möchte keine Software von Drittanbietern wie Winzip, etc. Ich möchte dies durch Codierung tun. Ich möchte, dass die Sicherheit auf hohem Niveau ist. Hier ist der Code, der die SQL-Datei mit PHP-So schützen Sie eine exportierte (.sql) Datei mit Hilfe von PHP

<?php 
    //ENTER THE RELEVANT INFO BELOW 
    $mysqlUserName  = "root"; 
    $mysqlPassword  = ""; 
    $mysqlHostName  = "localhost"; 
    $DbName    = ""; 
    $backup_name  = "mybackup.sql"; 
    $tables    = array("table1","table2"); 

    //or add 5th parameter(array) of specific tables: array("mytable1","mytable2","mytable3") for multiple tables 

    Export_Database($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName, $tables, $backup_name); 

    function Export_Database($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName, $tables, $backup_name) 
    { 
     $mysqli = new mysqli($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName); 
     $mysqli->select_db($DbName); 
     $mysqli->query("SET NAMES 'utf8'"); 

     $queryTables = $mysqli->query('SHOW TABLES'); 
     while($row = $queryTables->fetch_row()) 
     { 
      $target_tables[] = $row[0]; 

     } 


     if($tables !== false) 
     { 
      $target_tables = array_intersect($target_tables, $tables); 

     } 
     foreach($target_tables as $table) 
     { 
      $result   = $mysqli->query('SELECT * FROM '.$table); 
      $fields_amount = $result->field_count; 
      $rows_num  = $mysqli->affected_rows;  
      $res   = $mysqli->query('SHOW CREATE TABLE '.$table); 
      $TableMLine  = $res->fetch_row(); 
      $content  = (!isset($content) ? '' : $content) . "\n\n".$TableMLine[1].";\n\n"; 

      for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0) 
      { 
       while($row = $result->fetch_row()) 
       { //when started (and every after 100 command cycle): 
        if ($st_counter%100 == 0 || $st_counter == 0) 
        { 
          $content .= "\nINSERT INTO ".$table." VALUES"; 
        } 
        $content .= "\n("; 
        for($j=0; $j<$fields_amount; $j++) 
        { 
         $row[$j] = str_replace("\n","\\n", addslashes($row[$j])); 
         if (isset($row[$j])) 
         { 
          $content .= '"'.$row[$j].'"' ; 
         } 
         else 
         { 
          $content .= '""'; 
         }  
         if ($j<($fields_amount-1)) 
         { 
           $content.= ','; 
         }  
        } 
        $content .=")"; 
        //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler 
        if ((($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) 
        { 
         $content .= ";"; 
        } 
        else 
        { 
         $content .= ","; 
        } 
        $st_counter=$st_counter+1; 
       } 
      } $content .="\n\n\n"; 
     } 
     //$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql"; 
     $backup_name = $backup_name ? $backup_name : $name.".sql"; 
     header('Content-Type: application/octet-stream'); 
     header("Content-Transfer-Encoding: Binary"); 
     header("Content-disposition: attachment; filename=\"".$backup_name."\""); 
     echo $content; 
    } 
?> 

Vielen Dank im Voraus exportiert.

+0

Es ist nicht möglich, eine .sql-Datei ohne eine Art von Drittanbieter-Tool wie winzip zu schützen oder in einem verschlüsselten Ordner zu speichern. –

+0

Mein Hauptproblem, dass ich nicht möchte, dass andere Zugriff auf diese Datei haben, nur ich sollte in der Lage sein, auf diese Datei zugreifen.Wenn es möglich ist, dies mit Speichern in einem verschlüsselten Ordner zu tun, führen Sie mich bitte wie mache ich das durch Kodierung in PHP oder Änderungen im obigen Code @ mistermartin –

+0

dann platzieren Sie diese Datei außerhalb des öffentlichen Bereichs. Wenn Sie diese Datei mit einem Kennwort schützen, wird bei jedem Ladevorgang nach einem Benutzernamen und einem Kennwort gefragt. –

Antwort

0

Speichern Sie keine privaten Daten in einem öffentlich zugänglichen Ordner.

Siehe deny direct access to a folder and file by htaccess (wenn Sie Apache verwenden) oder speichern Sie es außerhalb des Dokumentstammverzeichnisses.

+0

Sie haben Ihre Antwort von Ihrem ursprünglichen Ziparchive-bezogenen Element geändert, das in vorherigen Änderungen nicht angezeigt wird. Sie hatten nicht zufällig Basen auf meinem Kommentar, oder? –

+0

plus, was du gepostet hast würde dann als Duplikat konstituieren. –

+0

Nein. Ich dachte, das war nur über Verschlüsselung, aber dann las ich die Frage erneut und bemerkte, OP speichert es in einem öffentlichen Ordner .. Mein schlechtes :) – ShiraNai7