Ik heb een aantal .txt bestanden waarin 5 regels staan. De naam en het emailadres (regel 3 en 4) zijn encrypted op geslagen, vanwege privacy.

Een .txt bestand ziet er zo uit:


id-5e0786c07c802 // id
Friends //category
ygkKcL/jz9U= // naam (encrypted)
6gkKcL/jz9XuVRNayyIVcFbLw3ord0nc7IJj // email (encrypted)
902d95a9bf1c3f59a3996e4e7b4dec79 // token


Voorheen had ik de naam en email niet encrypted en gebruikte ik onderstaande code om bijv te zoeken op emailadres:


<?php
/* EMAIL SEARCH */
$email_search = $_GET['email_search']; // get string from url for search
if (isset($email_search)) {
    $searchthis = strtolower($email_search);    
    $email_matches = array();

    $files = glob("subscribers/*.txt"); // Specify the file directory by extension (.txt)

    foreach($files as $file) { // Loop the files in the directory   {

        $handle = @fopen($file, "r");

        if ($handle) {

            $lines = file($file);           
            $grab_email = strtolower($lines[3]); // for sorting only

            while (!feof($handle)) {
                $buffer = fgets($handle);

                if(strpos(strtolower($buffer), $searchthis) !== FALSE) // strtolower; search word not case sensitive    

                    $email_matches[$file] = $grab_email; // put all lines in array  indexed by email

            }

            fclose($handle);
        }
    }

}
asort($email_matches);

?>

<!-- search form -->
<form class="search-form form-inline" action="admin.php" method="GET">  
    <div class="input-group mb-3">
        <input class="form-control" type="text" name="email_search" placeholder="Search for..." />
        <div class="input-group-append">                
            <button class="btn btn-primary" type="submit">Search</button>
        </div>
    </div>                          
</form>


Maar nu is de naam en email encrypted en werkt mijn zoekfunctie niet meer uiteraard.
Hoe kan ik nu toch in de encrypted .txt bestanden zoeken op email?

PS: Wat ik heb geprobeerd, en dit werkt ook: de input van search veld eerst encrypten en dan met die encrypte waarde gaan zoeken. Dus als ik wil zoeken op de naam "John", dan encrypt ik eest de naam John, ( wordt bijv iets in de zin van "ub1TSIxADRYhTCuksKS+Gw==") en zoek dan met die encryptiewaarde. maar deze manier verdiend natuurlijk neit de schoonheidsprijs om het zo te doen...
Dan zou je al haast op twee manieren moeten gaan zoeken.

$encryption = openssl_encrypt($string, $met_enc, $key_enc, 0, $iv);
$encryption_lowercase = openssl_encrypt(strtolower($string), $met_enc, $key_enc, 0, $iv);

Maar dat is niet optimaal nee, maar een naam is toch niet geencrypt? En als je een e-mailadres altijd als lowercase opslaat heb je dat probleem ook niet.

En vergeet niet wat Ozzie zei, als iemand bij je bestand kan, kan ie ook bij de sleutel, dus dit is schijnveiligheid.
Email adres is idd altijd opgeslagen als lowercase. Maar ik wil de dtata gaan uitbreiden met : telefoonnummer, adres, huisnummer etc...vandaar de encryptie die ik zelf nodig acht omwille van privacy.

En vergeet niet wat Ozzie zei, als iemand bij je bestand kan, kan ie ook bij de sleutel, dus dit is schijnveiligheid.


Dit snap ik niet zo goed. De data in de txt bestanden zijn encrypted. Maar hoe zou iemand bij de sleutel moeten komen? Dit staat er in het php bestand:


<?php
$string = 'John';
$met_enc = 'aes256';  
$key_enc = 'sleutel';

$iv = '1234567891011121'; // 16 chars

//encrypts the string
$encryption = openssl_encrypt($string, $met_enc, $key_enc, 0, $iv);
$decryption = openssl_decrypt($encryption, $met_enc, $key_enc, 0, $iv);
?>


Niemand kan die sleutel toch lezen?
Even afgezien van de administrators die mijn webserver beheren dan...
Dit snap ik niet zo goed. De data in de txt bestanden zijn encrypted. Maar hoe zou iemand bij de sleutel moeten komen?

Jij geeft aan dat het bestand buiten de root staat en dus niet benaderbaar vanaf buitenaf. Dus zou encryptie niet nodig zijn. Je encrypt nu voor... iemand die toch bij je bestand kan? Deze iemand heeft dan toegang, dus kan evengoed bij de sleutel. Snap je?

Ik snap niet waarom je dit wilt uitbreiden en niet gewoon alles naar een database importeert en vanaf daar de rest (adres, etc) gaat toevoegen.
Ik ga dit ook idd in een database zetten. Met die flat file opslag zitten veel te veel haken en ogen aan. Dit soort info is niet de info die je in een flat file meot zetten. Jullie hebben heir volkomen gelijk in. Dus het wordt een database :)

Nog even over die txt bestanden:
In mijn .htaccess:

<Files ~ "\.txt$">
    Order allow,deny
    Deny from all
</Files>


Nu zijn de txt bestanden ook niet meer toegankelijk, ook al staan ze in de webroot of een subfolder daarvan
Nu zijn de txt bestanden ook niet meer toegankelijk, ook al staan ze in de webroot of een subfolder daarvan

Dat zal best zo zijn, maar het blijft erbij dat dit niet de juiste manier is.
Ik zou het script gebruiken om daarmee alles aan de database te voeren ;-)
Dan kun je veel makkelijker en efficiƫnter data selecteren, wijzigen, zoeken, etc.
Klein werkje, groot gemak.
Jack, zo dachten ze bij Ashley Madison waarschijnlijk ook. "De gegevens staan buiten de webroot dus is het veilig. Maar encryptie en hashing doe je juist voor (of tegen) mensen die onverhoopt toegang krijgen tot de gegevens op welke manier dan ook, maar geen toegang mogen hebben. Servers worden gehackt, dat is nu eenmaal zo. Men shared hosting ben je voor de veiligheid van de server afhankelijk van de security van je host en helaas ook van de andere gehoste websites.

Een vindingrijke crimineel of anders kwaadwillende kan altijd wel een manier vinden om bij de data te komen. Door goede encriptie of hashing maak je deze gegevens waardeloos.

Reageren