仓酷云

标题: PHP网站制作之PHP加密文本文件并限制特定页面的存取 [打印本页]

作者: 简单生活    时间: 2015-2-4 00:22
标题: PHP网站制作之PHP加密文本文件并限制特定页面的存取
你的确对PHP有兴趣,那么选择教材也是很重要的。加密|页面   1、 简介

  虽然在普通情形下,你的网站常常相当复杂以致它基本不请求利用数据库;然而在有些情形下,你的站点能够想限制对某些页面的存取。普通地,这意味着要利用一个数据库来存储口令和用户名。但是,你还有一个更轻易的办法-虽然其平安性差了一点,然而它仅包括了少少的编码。

  假如你在本人的Web使用法式中利用了数据库,那末你已可以在某处存储口令和用户名,而且有一种办法可用来认证会见者。然而,当因你的站点的平安性或庞杂性需求而没法包管利用数据库时,那该怎样办?能够有些时分你仅想要一些出格的人存取你的站点的某些页面或一些区域。为此,一种很复杂的体例就是利用一个存储口令的文本文件,而且创立一个页面来提醒会见者输出口令;假如口令与存储在该文本文件中的内容相婚配,那末答应该用户存取受限的页面;不然,在入手下手刷新页面之前显示一条恰当的动静以制止其存取。

  为了进一步的平安起见,你还可以用哈希法来加密存储在文本文件中的口令,如许假如它的内容在某种水平上被发明,它还将会是很难被查明。一切这些都可以用PHP办法来构建,并且只需少少量的编码。

  在正式入手下手前,你需求创立一个情况来测试和利用PHP;所以,你起首需求为PHP装置和设置装备摆设一个Web办事器。因为Apache与PHP协同任务优秀,而且易于装置和设置装备摆设,因而我保举利用这一计划。

  接上去,你需求创立一个页面(相似下图)-它有一个文本框用于吸收来自会见者的口令,还有一个submit按钮来把它发送到你的PHP文件。这既可所以一个新页面也能够是你的网站上的一个现有页面的一局部。象上面复杂的代码块应当足够了:

<form name="passwordForm" method="post" action="restricted.php">
<p>Password:
<input type="password" name="password">
<input type="submit" name="Submit" value="Login">
</p>
</form>
PHP网站制作之PHP加密文本文件并限制特定页面的存取
登录/注册后可看大图

  2、 创立PHP主页

  接上去,你需求创立完成实践任务的PHP主页。在一个文本编纂器中翻开一个空白页面,然后以尺度体例翻开一个PHP块:

<?
  如我之前所说起的,PHP具有一套尺度的函数和办法用来完成文件操作。个中,最为次要的几个是fopen(),fread()和fclose()函数。为了停止某种文件操作,咱们需求先翻开它,而且很分明,这是利用fopen()函数完成的;并且,咱们必需指定若何操作文件;读文件,读文件是最通俗的义务,然而别的一些额定标记可以用来告知法式是把文件指针放在入手下手仍是文件的停止,和假如文件还不存在的话是不是创立该文件。但是,在本例中,咱们所需求做的是,翻开包括口令字的文本文件并读取它。

  然后,起首创立一个到指定文本文件途径的变量:

$fileloc = "/apachesite/docs/pass.txt"

  接上去,创立一个变量来寄存文件指针:

$filetoread = fopen($fileloc, "r") or die("Could not open password file");

  你也能够利用die办法来停止该剧本,而且假如操作因某种缘由掉败的话将在屏幕上打印一条恰当的动静。一旦翻开文件,你需求读取它的内容,以便把它与以口令字模式输出的内容停止对照:

$storedpass = fread($filetoread, filesize($fileloc)) or die ("Could not read stored password");

  你应当设置一个变量来寄存文件中的数据,而且挪用fread()办法(它有两个参数:文件指针和文件长度)。你能够晓得(也能够不晓得)你的口令的长度。为了使未来的编程轻易些(当口令字需求改动时),你可使用filesize()办法来失掉文件长度。一旦文件不再需求,当即封闭之:

  fclose($filetoread);
  3、 利用口令

  为了利用输出到HTML表单中的口令,你需求失掉它并把它存储到一个变量中。当咱们利用POST办法来把用户输出的内容发送到PHP剧本时,咱们可使用$_POST来获得输出的口令:

$password = $_POST["password"];
  然后,咱们可以复杂地把输出的口令字与存储的口令字停止对照并接纳响应的办法:

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网站制作之PHP加密文本文件并限制特定页面的存取
登录/注册后可看大图

  4、 加密

  如今,咱们入手下手剖析在后面提到的加密成绩。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挪用。

PHP网站制作之PHP加密文本文件并限制特定页面的存取
登录/注册后可看大图

  就本文所会商的办法而言,下面的剧本框架所供应的已足够了。别的,本文所会商的测试文件,虽然十分根基,然而该HTML页面可以被轻易地到场到一个现有的页面中去;你可以把它粘贴到一个窗口中去并收拾整顿它的款式以婚配你的主页的其他局部,而且你能够包括一个准时函数-它在把会见者从头定向到一个平安的页眼前守候一段固定的工夫,同时显示一条动静唆使口令阃确。你还可以包括一个相似的函数集来重载初始页面。

  总之,你可使用本文所供应的剧本来限制到你的站点布局中的特定页面的存取。虽然该办法并没有供应一个数据库所供应的平安的用户名/口令认证办法,而且它意味着你必需把口令发给想存取平安页面的任何人,然而它切实其实消耗十分少的工夫和编码供应了一种复杂的平安层。  算是1个熟悉的过程,所以c语言的基础有就更好,没有也不怕。
作者: 谁可相欹    时间: 2015-2-4 12:38
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 冷月葬花魂    时间: 2015-2-4 21:01
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
作者: 仓酷云    时间: 2015-2-9 02:54
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 金色的骷髅    时间: 2015-2-10 09:16
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 小魔女    时间: 2015-3-1 06:37
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 变相怪杰    时间: 2015-3-2 20:46
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 因胸联盟    时间: 2015-3-8 16:08
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: admin    时间: 2015-3-15 05:24
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 分手快乐    时间: 2015-3-21 18:40
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 简单生活    时间: 2015-3-22 22:26
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 第二个灵魂    时间: 2015-3-23 08:38
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 小妖女    时间: 2015-3-27 22:10
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 爱飞    时间: 2015-4-12 13:50
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 乐观    时间: 2015-4-16 12:20
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者: 灵魂腐蚀    时间: 2015-4-16 14:16
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 莫相离    时间: 2015-4-21 13:23
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者: 海妖    时间: 2015-4-22 05:37
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
作者: 老尸    时间: 2015-4-29 06:52
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 不帅    时间: 2015-5-1 11:11
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2