hoe kan ik zoeken in .txt bestanden waarvan de data encrypted is?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jack Maessen

Jack Maessen

12/02/2020 16:59:27
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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...
Gewijzigd op 12/02/2020 17:09:15 door Jack Maessen
 
PHP hulp

PHP hulp

20/02/2020 14:21:30
 
Ozzie PHP

Ozzie PHP

12/02/2020 17:09:01
Quote Anchor link
>> Hoe kan ik nu toch in de encrypted .txt bestanden zoeken op email?

Door het betreffende e-mailadres eerst op dezelfde manier te encrypten en vervolgens met die ge-encrypte waarde te gaan zoeken in de tekstbestanden.

(Overigens is het erg omslachtig om gebruikers bij te houden via tekstbestanden. Daar gebruik je normaliter een database voor.)
 
Jack Maessen

Jack Maessen

12/02/2020 17:11:12
Quote Anchor link
Ozzie, klopt. dit werkt ook, maar is niet de manier denk ik waarop het hoort.
Eerst decrypten als er zoek request wordt gedaan en dan tijdelijk op slaan in memory of iets dergelijks? Heb overigens geen idee hoe dat zou moeten ook...
Gewijzigd op 12/02/2020 17:12:41 door Jack Maessen
 
Ozzie PHP

Ozzie PHP

12/02/2020 17:13:55
Quote Anchor link
Op welke manier encrypt je de naam? Via welke methode?
 
Jack Maessen

Jack Maessen

12/02/2020 17:18:13
Quote Anchor link
open_ssl

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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);

echo $encryption.'<br />';
echo $decryption.'<br />';
?>
 
Ozzie PHP

Ozzie PHP

12/02/2020 17:25:47
Quote Anchor link
Oké. Ik denk toch dat de manier die ik heb aangedragen dan de meeste logische is.

>> Eerst decrypten als er zoek request wordt gedaan en dan tijdelijk op slaan in memory of iets dergelijks?

Dus stel je hebt 1.000 users, dan zou je 1.000 tekstbestanden moeten inlezen, gaan decrypten, alle informatie storen enz. Lijkt me niet wenselijk. En wat als je 10.000 gebruikers hebt? Allesbehalve efficiënt.

De zoekwaarde eerst encrypten en met die waarde gaan zoeken in de tekstbestanden is het meest efficiënt. Dat gezegd hebbende ... dit moet je niet willen doen met tekstbestanden. Hiervoor zijn databases uitgevonden.
 
- Ariën -
Beheerder

- Ariën -

12/02/2020 17:28:26
Quote Anchor link
Ik mag hopen dat het bestand netjes buiten de webroot staat, ook al is het gecodeerd?
Persoonlijk zou ik aanraden om alles netjes in een database plaatsen. Die zijn juist bedoeld om in te zoeken. Vanwaar de beslissing om dit in tekstbestanden op te slaan?
Gewijzigd op 12/02/2020 17:33:49 door - Ariën -
 
Jack Maessen

Jack Maessen

12/02/2020 17:34:26
Quote Anchor link
@Arien het staat idd buiten de webroot. Daarom zat ik ook te denken: moet de data daarin dan wel encrypted worden? Niemand kan er toch bij komen? Ja behalve de administrators van mijn hosting company natuurlijk...
 
Ozzie PHP

Ozzie PHP

12/02/2020 17:53:35
Quote Anchor link
>> Daarom zat ik ook te denken: moet de data daarin dan wel encrypted worden? Niemand kan er toch bij komen?

Je hebt het zelf ge-encrypt. Ik neem aan dat je dat met een bepaalde reden hebt gedaan. Een naam of mailadres wordt meestal niet ge-encrypt. Wachtwoorden daarentegen wel ... niet ge-encrypt maar gehashed.

Op zich kan je mailadressen encrypten, maar de enige manier waarop iemand daarbij kan komen is als hij toegang heeft tot de server. Op dat moment heeft hij ook toegang tot de decryptie-methode. Anders gezegd, je zet iets op slot, maar de sleutel ligt ernaast.
 
Michael -

Michael -

12/02/2020 20:23:00
Quote Anchor link
@Jack, Je reageert niet op de opmerking om een database te gebruiken.
Heb je de mogelijkheid om een database te gebruiken? Doe dit dan.
Heb je dat niet, heb je de mogelijkheid tot sqlite3? Dit is een filebased database.
Heb je dat ook niet, sla het dan tenminste op als JSON. Dan hoeft het ook maar in 1 bestand ipv meerdere losse en kun je 't veel makkelijker uitlezen (als een array bijvoorbeeld).

Over het zoeken, zoals gezegd eerst de zoekterm encrypten en daarmee zoeken. Let wel op dat sommige encryptie methodes steeds andere uitkomsten geven, dan gaat deze zon niet op.
Gewijzigd op 12/02/2020 21:02:05 door Michael -
 
Jack Maessen

Jack Maessen

12/02/2020 23:33:40
Quote Anchor link
jawel, ik heb de mogelijkheid om een database te gebruiken. Dit is een beetje begonnen als uitdaging om data op te slaan zonder database maar in flat file bestanden. Omwille van de privacy dacht ik: dit moet je wel gaan encrypten omdat het persoonsgevoelige info is. Tja, en toen realiseerde ik me: oei...dat geeft problemen met de zoekfunctie...
maar idd, een DB is hier de meest aangewezen methode voor. helemaal mee eens. Maar ik wilde gewoon weten of ik een alternatief had om encrypte data te doorzoeken in txt bestanden. En zoals Ozzie al zei: bij elke zoek request, eerst de data encrypten en met de encrypte data gaan zoeken. En dit werkt ook wel , alleen je moet genuanceerder gaan zoeken.
"John" staat bijv met hoofdletter opgeslagen in de txt file.
Als ik zoek op "John" of "john" zal dat nu geen verschil uitmaken doordat ik strtolower gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$searchthis
= strtolower($order_search);
if(strpos(strtolower($buffer), $searchthis) !== FALSE) // strtolower; search word not case sensitive
?>


Maar als ik de data encrypted ga opslaan, kan ik die strtolower niet meer gebruiken.
"John" geeft encrypted hele andere karakters dan "john" met kleine letter. Das nadeel...
Gewijzigd op 12/02/2020 23:44:05 door Jack Maessen
 
Michael -

Michael -

12/02/2020 23:39:07
Quote Anchor link
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.
Gewijzigd op 12/02/2020 23:39:45 door Michael -
 
Jack Maessen

Jack Maessen

12/02/2020 23:51:27
Quote Anchor link
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.
Quote:
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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...
Gewijzigd op 12/02/2020 23:54:53 door Jack Maessen
 
Michael -

Michael -

12/02/2020 23:55:35
Quote Anchor link
Quote:
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.
Gewijzigd op 12/02/2020 23:56:30 door Michael -
 
Jack Maessen

Jack Maessen

12/02/2020 23:59:57
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<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
Gewijzigd op 13/02/2020 00:15:07 door Jack Maessen
 
Michael -

Michael -

13/02/2020 01:09:02
Quote Anchor link
Quote:
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.
 
Bernhard Flokstra

Bernhard Flokstra

13/02/2020 13:53:05
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.