ホームページ  >  記事  >  バックエンド開発  >  PHP はテキスト ファイルを暗号化し、特定のページへのアクセスを制限する効果を実装します_php の例

PHP はテキスト ファイルを暗号化し、特定のページへのアクセスを制限する効果を実装します_php の例

WBOY
WBOYオリジナル
2016-12-05 13:28:141126ブラウズ

ファイル暗号化手順はサイトで広く使用されており、データベースを使用してパスワードとユーザー名を保存することを意味します。詳細は以下の通りです

1. はじめに

一般に、Web サイトはデータベースをまったく使用する必要がないほどシンプルであることが多いですが、場合によっては、サイトで特定のページへのアクセスを制限したい場合があります。通常、これはデータベースを使用してパスワードとユーザー名を保存することを意味します。ただし、より簡単な方法があります。安全性は少し劣るものの、最小限のコーディングで済みます。

Web アプリケーションでデータベースを使用している場合は、パスワードとユーザー名をどこかに保存し、訪問者を認証する方法がすでに用意されています。しかし、サイトのセキュリティや複雑さのためにデータベースの使用が保証されない場合はどうなるのでしょうか?特定の人だけがサイトの特定のページまたは領域にアクセスできるようにしたい場合があります。これを行う非常に簡単な方法は、パスワードを保存するテキスト ファイルを使用し、訪問者にパスワードの入力を求めるページを作成することです。パスワードがテキスト ファイルに保存されているものと一致する場合、ユーザーはアクセスを許可されます。それ以外の場合は、ページの更新を開始する前に、アクセスを無効にするための適切なメッセージを表示します。

セキュリティをさらに強化するために、ハッシュを使用してテキスト ファイルに保存されたパスワードを暗号化することもできます。これにより、その内容が何らかの方法で発見された場合でも、発見することが困難になります。これらはすべて PHP メソッドを使用して構築でき、最小限のコーディングが必要です。

正式に開始する前に、PHP をテストして使用するための環境をセットアップする必要があります。そのため、まず PHP 用の Web サーバーをインストールして構成する必要があります。 Apache は PHP とうまく連携し、インストールと設定が簡単なので、このオプションをお勧めします。

次に、ページ (下の画像と同様) を作成する必要があります。このページには、訪問者からパスワードを受け取るためのテキスト ボックスと、パスワードを PHP ファイルに送信するための送信ボタンがあります。これは、サイト上の新しいページまたは既存のページの一部のいずれかです。次のような単純なコード ブロックで十分です:

リーリー

2. PHPホームページを作成します

次に、実際の作業を行う PHP ホームページを作成する必要があります。テキストエディタで空白のページを開き、標準的な方法で PHP ブロックを開きます:

前に述べたように、PHP にはファイル操作のための標準的な関数とメソッドのセットがあります。その中で最も重要なものは、fopen()、fread()、および fclose() 関数です。何らかのファイル操作を実行するには、まずファイルを開く必要があります。これは明らかに fopen() 関数を使用して行われます。さらに、ファイルの読み取り方法を指定する必要があります。ファイルの読み取りが最も一般的です。ファイルポインタをファイルの先頭に置くか末尾に配置するか、ファイルがまだ存在しない場合に作成するかどうかをプログラムに指示するために使用できる追加フラグは他にもあります。ただし、この場合は、パスワードを含むテキスト ファイルを開いて読み取るだけで済みます。

次に、最初に指定されたテキスト ファイル パスに変数を作成します。

リーリー

次に、ファイル ポインターを保持する変数を作成します。

リーリー

die メソッドを使用してスクリプトを終了することもできます。何らかの理由で操作が失敗した場合は、適切なメッセージが画面に表示されます。ファイルを開いたら、パスワードの形式で入力された内容と比較するために、その内容を読み取る必要があります:

リーリー

ファイルにデータを保存する変数を設定し、fread() メソッドを呼び出す必要があります (ファイル ポインターとファイル長の 2 つのパラメーターがあります)。パスワードの長さを知っている場合もあれば、知らない場合もあります。将来のプログラミングを容易にするために (パスワードを変更する必要がある場合)、filesize() メソッドを使用してファイルの長さを取得できます。ファイルが不要になったら、すぐに閉じてください:

リーリー

3. パスワードを使用する

HTMLフォームに入力したパスワードを使用するには、パスワードを取得して変数に保存する必要があります。 POST メソッドを使用してユーザー入力を PHP スクリプトに送信する場合、$_POST を使用して入力されたパスワードを取得できます:

リーリー

その後、入力されたパスワードと保存されたパスワードを単純に比較し、それに応じてアクションを実行できます:

リーリー

第一个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页面能够被容易地加入到一个现有的页面中去;你可以把它粘贴到一个窗口中去并整理它的样式以匹配你的主页的其余部分,并且你可能包含一个定时函数-它在把访问者重新定向到一个安全的页面前等待一段固定的时间,同时显示一条消息指示口令正确。你还可以包含一个类似的函数集来重载初始页面。

总之,你可以使用本文所提供的脚本来限制到你的站点结构中的特定页面的存取。尽管该方法并没有提供一个数据库所提供的安全的用户名/口令认证方法,并且它意味着你必须把口令发给想存取安全页面的任何人,但是它的确耗费非常少的时间和编码提供了一种简单的安全层。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。