当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP加密文本文件并限制特定页面的存取

PHP
AJAX在PHP中的简单使用
vim下高亮显示php代码
用 PHP 使 Web 数据分析进入更高境界
用Apache与MySQL整合实现基本身份认证
通用PHP动态生成静态HTML网页的代码
自己轻松修复Discuz!数据库技巧
PHP在Web开发领域的优势在哪?
php4和php5单态模式(Singleton Pattern)写法
使用Xdebug优化你的php程序
PHP学习入门的一些基础知识
关于正则表达式学习
浅谈PHP开发团队的管理之道
传奇的诞生,PHP三位创始人简介
利用PHP制作简单的内容采集器
PHP精确到每一秒钟的在线人数显示代码
一些PHP学习过程中的心得和经验
WINDOWS服务器安装多套PHP的另类解决方案
让你的PHP引擎全速运转的三个简单绝招
大型系统上PHP令人不爽的九大原因
php的计数器程序

PHP加密文本文件并限制特定页面的存取


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 78 ::
收藏到网摘: n/a

一、简介

尽管在一般情况下,你的网站往往相当简单以至它根本不要求使用数据库;但是在有些情况下,你的站点可能想限制对某些页面的存取。一般地,这意味着要使用一个数据库来存储口令和用户名。然而,你还有一个更容易的方法-尽管其安全性差了一点,但是它仅包含了极少的编码。

如果你在自己的Web应用程序中使用了数据库,那么你已经能够在某处存储口令和用户名,并且有一种方法可用来认证访问者。但是,当因你的站点的安全性或复杂性需要而无法保证使用数据库时,那该怎么办?可能有些时候你仅想要一些特别的人存取你的站点的某些页面或一些区域。为此,一种很简单的方式就是使用一个存储口令的文本文件,并且创建一个页面来提示访问者输入口令;如果口令与存储在该文本文件中的内容相匹配,那么允许该用户存取受限的页面;否则,在开始刷新页面之前显示一条适当的消息以禁止其存取。

为了进一步的安全起见,你还可以用哈希法来加密存储在文本文件中的口令,这样如果它的内容在某种程度上被发现,它还将会是很难被查明。所有这些都可以用PHP方法来构建,而且只需极少量的编码。

在正式开始前,你需要建立一个环境来测试和使用PHP;所以,你首先需要为PHP安装和配置一个Web服务器。由于Apache与PHP协同工作良好,并且易于安装和配置,因此我推荐使用这一方案。

接下来,你需要创建一个页面(类似下图)-它有一个文本框用于接收来自访问者的口令,还有一个submit按钮来把它发送到你的PHP文件。这既可以是一个新页面也可以是你的网站上的一个现有页面的一部分。象下面简单的代码块应该足够了:

  <formname="passwordForm"method="post"action="restricted.php">
<p>Password:
<inputtype="password"name="password">
<inputtype="submit"name="Submit"value="Login">
</p>
</form>
 

 

三、使用口令

为了使用输入到HTML表单中的口令,你需要得到它并把它存储到一个变量中。当我们使用POST方法来把用户输入的内容发送到PHP脚本时,我们可以使用$_POST来取得输入的口令:

  $password=$_POST["password"];
然后,我们可以简单地把输入的口令字与存储的口令字进行比较并采取相应的措施:

  if(empty($password)){
die("Nopasswordentered");
}
elseif($password!=$storedpass){
die("PasswordIncorrect");
}
else{
Header("Location:securepage.htm")
}
?>
第一个if语句处理一个空的$password变量以防止当输入框为空时,submit按钮被点击。如果用户输入的口令与存储的那个不匹配,那么第二个语句执行括号内的代码并且输出一条消息显示口令是错误的。最后,如果前两个条件都不满足,那么,该脚本认为口令一定是正确的并且把一个重定向头(header)发送到浏览器以打开示例中的HTML页面。

在此能够工作之前,你需要创建一个文本文件并且把它放到与该PHP文件相同的目录下。它需要包含你目前想要使用的以普通文本形式存储的口令,并且应该引用该PHP文件名。保存所有这些文件,然后在一个浏览器中打开该HTML页面,并用该表单进行试验。该页面应该如所设想的那样工作。

当你输入正确的口令时,如果你得到一个错误消息,其内容是:

  "Warning:Cannotmodifyheaderinformation-headersalreadysentby(thepathtoyourphpfile)"
这意味着,你需要把位于你的Windows目录下的php.ini文件中的output-buffering设置为"on"。