【发布时间】:2019-12-23 19:59:16
【问题描述】:
对于一个简单的邮件列表,我使用平面文件 (.txt) 文件来存储订阅者的日期。
.txt 文件的名称与我分配给订阅者的 id 相同。
包含数据(姓名和电子邮件)的 .txt 文件看起来像这样:
id-8759874589.txt
在我发送的每封电子邮件中,我都会发送一个取消订阅链接,以便订阅者可以取消订阅接收邮件。我使用base64_encode 对取消订阅链接进行编码。只为眼睛的面具。
取消订阅链接如下所示:
http://example.com/unsubscribe.php?id=aWQtMjAxOTEyMjMNDUyMTQ%3D&email=amNtZy5tYWVzc2VuQGdtYWlsLmNvbQ%3D%3D
为了退订,我使用这个代码:
<?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>';
}
}
?>
如您所见:分配给 .txt 文件的 id 将被取消链接。订阅者将从邮件列表中删除。
我的担心: 可以说:您是订阅者并且您确实取消了订阅,那么您就知道该 url 是如何创建的。 您可以开始猜测:订阅者将如何退订?可以说:您知道每个订阅者的数据都在一个 .txt 文件中,文件名称为 id。您可以让机器人猜测 url 字符串中的身份并执行此 url。在更糟糕的情况中,他发现了一个确实存在的 id,该文件将被删除。随机订阅者从列表中删除而不做自己。
我怎样才能更好地保护它?
【问题讨论】:
-
使随机代码足够复杂,以至于基本上无法猜测。 UUID 有效。
-
“我怎样才能更好地保护它?” - 尽可能使用数据库。如果它落入坏人之手,你现在拥有的东西可能非常危险。另外,文本文件是很多工作。我第一手知道这一点。您没有为此使用数据库的任何特殊原因?
-
@Funk Forty Niner 原因是:我想在不使用数据库的情况下创建一个简单的邮件列表。当然我可以使用数据库,但我认为使用
.txt文件使其变得非常简单是一个挑战