Auf der Website werden häufig Dateiverschlüsselungsverfahren eingesetzt, was bedeutet, dass eine Datenbank zum Speichern von Passwörtern und Benutzernamen verwendet wird. Die Details lauten wie folgt:
1. Einleitung
Obwohl Ihre Website im Allgemeinen oft so einfach ist, dass überhaupt keine Datenbank erforderlich ist, gibt es Situationen, in denen Ihre Website möglicherweise den Zugriff auf bestimmte Seiten einschränken möchte. In der Regel bedeutet dies, dass eine Datenbank zum Speichern von Passwörtern und Benutzernamen verwendet wird. Es gibt jedoch einen einfacheren Weg – dieser ist zwar etwas weniger sicher, erfordert aber nur minimalen Programmieraufwand.
Wenn Sie in Ihrer Webanwendung eine Datenbank verwenden, haben Sie bereits die Möglichkeit, Passwörter und Benutzernamen irgendwo zu speichern und Besucher zu authentifizieren. Aber was passiert, wenn die Verwendung einer Datenbank aufgrund der Sicherheit oder Komplexität Ihrer Website nicht gerechtfertigt ist? Es kann vorkommen, dass Sie möchten, dass nur bestimmte Personen Zugriff auf bestimmte Seiten oder Bereiche Ihrer Website haben. Eine sehr einfache Möglichkeit besteht darin, eine Textdatei zu verwenden, in der das Passwort gespeichert ist, und eine Seite zu erstellen, die den Besucher zur Eingabe des Passworts auffordert. Wenn das Passwort mit dem in der Textdatei gespeicherten übereinstimmt, darf der Benutzer darauf zugreifen Betreff: eingeschränkte Seite; andernfalls wird eine entsprechende Meldung angezeigt, um den Zugriff zu deaktivieren, bevor mit der Aktualisierung der Seite begonnen wird.
Zur weiteren Sicherheit können Sie auch Hashing verwenden, um das in der Textdatei gespeicherte Passwort zu verschlüsseln, sodass es schwierig sein wird, den Inhalt herauszufinden, wenn er irgendwie entdeckt wird. All dies kann mit PHP-Methoden erstellt werden und erfordert nur minimalen Programmieraufwand.
Bevor Sie beginnen, müssen Sie eine Umgebung zum Testen und Verwenden von PHP einrichten. Daher müssen Sie zunächst einen Webserver für PHP installieren und konfigurieren. Da Apache gut mit PHP funktioniert und einfach zu installieren und zu konfigurieren ist, empfehle ich diese Option.
Als nächstes müssen Sie eine Seite erstellen (ähnlich dem Bild unten) – sie verfügt über ein Textfeld, um das Passwort vom Besucher zu erhalten, und eine Schaltfläche zum Senden, um es an Ihre PHP-Datei zu senden. Dies kann entweder eine neue Seite oder ein Teil einer vorhandenen Seite auf Ihrer Website sein. Ein einfacher Codeblock wie der folgende sollte ausreichen:
<form name="passwordForm" method="post" action="restricted.php"> <p>Password: <input type="password" name="password"> <input type="submit" name="Submit" value="Login"> </p> </form>
2. PHP-Homepage erstellen
Als nächstes müssen Sie die PHP-Homepage erstellen, die die eigentliche Arbeit erledigt. Öffnen Sie eine leere Seite in einem Texteditor und öffnen Sie dann einen PHP-Block auf die übliche Weise:
Wie ich bereits erwähnt habe, verfügt PHP über einen Standardsatz an Funktionen und Methoden für Dateioperationen. Unter ihnen sind die Funktionen fopen(), fread() und fclose() die wichtigsten. Um eine Dateioperation auszuführen, müssen wir sie zuerst öffnen. Dies wird natürlich mit der Funktion fopen() erreicht. Darüber hinaus müssen wir angeben, wie die Datei gelesen werden soll. Am häufigsten ist das Lesen von Dateien Aufgabe, aber es gibt noch andere Extra-Flags, mit denen dem Programm mitgeteilt werden kann, ob der Dateizeiger am Anfang oder am Ende der Datei platziert werden soll und ob die Datei erstellt werden soll, wenn sie noch nicht existiert. In diesem Fall müssen wir jedoch lediglich die Textdatei mit dem Passwort öffnen und lesen.
Dann erstellen Sie zunächst eine Variable für den angegebenen Textdateipfad:
$fileloc = "/apachesite/docs/pass.txt"
Als nächstes erstellen Sie eine Variable, die den Dateizeiger enthält:
$filetoread = fopen($fileloc, "r") or die("Could not open password file");
Sie können das Skript auch mit der Methode „die“ beenden und eine entsprechende Meldung auf dem Bildschirm ausgeben, wenn der Vorgang aus irgendeinem Grund fehlschlägt. Sobald die Datei geöffnet ist, müssen Sie ihren Inhalt lesen, um ihn mit dem in Form eines Passworts eingegebenen Inhalt zu vergleichen:
$storedpass = fread($filetoread, filesize($fileloc)) or die ("Could not read stored password");
Sie sollten eine Variable festlegen, um die Daten in der Datei zu speichern, und die fread()-Methode aufrufen (sie hat zwei Parameter: Dateizeiger und Dateilänge). Möglicherweise kennen Sie die Länge Ihres Passworts (oder auch nicht). Um die zukünftige Programmierung zu vereinfachen (wenn das Passwort geändert werden muss), können Sie die Methode filesize() verwenden, um die Dateilänge abzurufen. Sobald die Datei nicht mehr benötigt wird, schließen Sie sie sofort:
fclose($filetoread);
3. Passwort verwenden
Um das im HTML-Formular eingegebene Passwort verwenden zu können, müssen Sie es abrufen und in einer Variablen speichern. Wenn wir die POST-Methode verwenden, um Benutzereingaben an ein PHP-Skript zu senden, können wir $_POST verwenden, um das eingegebene Passwort zu erhalten:
$password = $_POST["password"];
Wir können dann einfach das eingegebene Passwort mit dem hinterlegten Passwort vergleichen und entsprechend Maßnahmen ergreifen:
if (empty ($password)){ die ("No password entered"); } elseif ($password != $storedpass){ die ("Password Incorrect"); } else{ Header("Location: securepage.htm") }
第一个if语句处理一个空的$password变量以防止当输入框为空时,submit按钮被点击。如果用户输入的口令与存储的那个不匹配,那么第二个语句执行括号内的代码并且输出一条消息显示口令是错误的。最后,如果前两个条件都不满足,那么,该脚本认为口令一定是正确的并且把一个重定向头(header)发送到浏览器以打开示例中的HTML页面。
在此能够工作之前,你需要创建一个文本文件并且把它放到与该PHP文件相同的目录下。它需要包含你目前想要使用的以普通文本形式存储的口令,并且应该引用该PHP文件名。保存所有这些文件,然后在一个浏览器中打开该HTML页面,并用该表单进行试验。该页面应该如所设想的那样工作。
当你输入正确的口令时,如果你得到一个错误消息,其内容是:
"Warning: Cannot modify header information - headers already sent by (thepathtoyourphpfile)"
这意味着,你需要把位于你的Windows目录下的php.ini文件中的output-buffering设置为"on"。
四、 加密
现在,我们开始分析在前面提到的加密问题。PHP具有一些内置的MD5方法。这样以来,在把访问者输入的口令与存储的口令进行比较之前,我们可以很容易地使用这些函数来转换它。
MD5是一种单向哈希算法,这意味着口令可以仅用一种方向进行加密-从普通文本到加密文本,而以另外一种方向是不可能的。然而,这并不是就能使得它不可破解。这种加密容易被以暴力方式或者通过字典攻击加以破解,但是它仍然还是比较安全的。你可以把下列一行添加到$password变量的声明语句之后:
$md5password = (md5($password));
这样可以把一个输入到该文本框中的内容的加密版本保存到变量$md5password中。现在,你需要修改你的if语句,以便它把存储的口令与新的加密的口令加以比较:
if (empty ($password)) { die ("No password entered"); } elseif ($md5password != $storedpass) { die ("Password Incorrect"); } else { header("Location: securepage.htm"); }
如你所见,我们仅改变了语句的elseif部分中的变量。这是因为即使是一个空的输入变量也被哈希化为一个32位值,因此$md5variable永远不可能为空,-即使在把任何文本输入到输入域之前点击submit按钮。
现在,所有你需要做的就是,找到你想存储在文本文件pass.txt中的该口令的哈希值。为此,你可以注释掉整个的if语句并且再加上一个echo语句以把加密的口令显示在屏幕上。然后,你还可以复制加密串并且把它保存到口令文件中。然而,你必须记住,在使用该脚本之前,取消注释if语句并且删除echo调用。
就本文所讨论的方法而言,上面的脚本框架所提供的已经足够了。另外,本文所讨论的测试文件,尽管非常基本,但是该HTML页面能够被容易地加入到一个现有的页面中去;你可以把它粘贴到一个窗口中去并整理它的样式以匹配你的主页的其余部分,并且你可能包含一个定时函数-它在把访问者重新定向到一个安全的页面前等待一段固定的时间,同时显示一条消息指示口令正确。你还可以包含一个类似的函数集来重载初始页面。
总之,你可以使用本文所提供的脚本来限制到你的站点结构中的特定页面的存取。尽管该方法并没有提供一个数据库所提供的安全的用户名/口令认证方法,并且它意味着你必须把口令发给想存取安全页面的任何人,但是它的确耗费非常少的时间和编码提供了一种简单的安全层。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!