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.txtElke 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%3DVoor 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?