Voor een simpel mailinglist maak ik gebruik van flat-file (.txt) bestanden om de gegevens in op te slaan.
De naam van het textbestand, (met daarin de gegevens zoals Naam en Email) wordt gecreeerd met de id en .txt erachter. Dus zoiets als:
id-15878547698.txt

Elke inschrijver krijgt een uitschrijflink mee die natuurlijk voor iedereen uniek is. die uitschrijflink bevat de id.
Ik gebruik overigens voor elke id base64_encode zodat ie niet direct voor het oog logisch lijkt.
Als een gebruiker op de uitschrijflink klikt, wordt de url string zoiets als:
http://mijndomein.com/unsubsribe.php?id=id-aWQtMjAxOTEyMjMNDUyMTQ%3D&email=amNtZy5tYWVzc2VuQGdtYWlsLmNvbQ%3D%3D


Voor uit te schrijven ziet de code er zo uit:
<?php
	$id = $_GET['id'];
	$email = $_GET['email'];
	// decode the id and email string
	$id_decode = base64_decode($id);
	$email_decode = base64_decode($email);
	if( isset($id_decode) ) {	
				
		$filename = 'subscribers/'.$id_decode.'.txt';	
		// delete subscribers entry
		if(file_exists($filename)) { 
			unlink($filename);	
			echo '<div class="alert alert-success"><b>'.$email_decode.'</b> is successfully removed from our mailinglist!</div>';		
		}
		else {
			echo '<div class="alert alert-danger">Email not found or you already have unsubscribed from our mailinglist!</div>';
		}		
	}
	?>

Zoals je ziet: de id wordt eerst decoded en het txt bestand met de naam van de id wordt unlinked. De inschrijver is verwijderd.

Mijn zorgen: Als je een inschrijver was en je hebt uitgeschreven, dan weet je hoe de url eruitziet met de id erin. Zou je dan ook nog weten dat die id gekoppeld is aan een textbestand dat unlinked wordt bij uitschrijven, dan zou je er een bot op los kunnen laten op potentiele id's te raden en als die bot toevallig een id te pakken heeft die ook nog bestaat, dan wordt een willekeurige gebruiker dus uitgeschreven zonder dat ie het zelf heeft gedaan.

Mijn vraag: hoe kan ik dit beter beveiligen?
Frank Nietbelangrijk op 23/12/2019 21:58:39

Inderdaad buiten de webroot is beter. Maar ook daar kunnen anderen bij (denk aan de server beheerders) dus encrypten is geen slecht idee.

En wat dacht je dan van inloggegevens van je database? :-P
Bij een webhosting teken je ervoor dat de data eigendom van jouw blijft, en dat hosting er zomaar niets in te zoeken heeft, tenzij er een goede reden is.

Als iemand zomaar in mijn data staat te neuzen, dan kan die een belletje van mijn advocaat verwachten. :-P
Ja klopt. En dan dus die encryptie sleutel. Zet die er ook maar gelijk bij. Toch is de data niet meer in één klap leesbaar en zonder sleutel al helemaal niet. Ook backups (van de database) bieden zonder die sleutel dan weinig relevants.

Ik zeg overigens niet dat je nu al je data in de database moet gaan encrypten. Absoluut niet. Maar als je nou mijnheer Bol zou heten dan zou ik er toch serieus over gaan nadenken om al die duizenden mailadressen eens door de blender te halen...

Reageren