|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你的确对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>
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"。
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挪用。
就本文所会商的办法而言,下面的剧本框架所供应的已足够了。别的,本文所会商的测试文件,虽然十分根基,然而该HTML页面可以被轻易地到场到一个现有的页面中去;你可以把它粘贴到一个窗口中去并收拾整顿它的款式以婚配你的主页的其他局部,而且你能够包括一个准时函数-它在把会见者从头定向到一个平安的页眼前守候一段固定的工夫,同时显示一条动静唆使口令阃确。你还可以包括一个相似的函数集来重载初始页面。
总之,你可使用本文所供应的剧本来限制到你的站点布局中的特定页面的存取。虽然该办法并没有供应一个数据库所供应的平安的用户名/口令认证办法,而且它意味着你必需把口令发给想存取平安页面的任何人,然而它切实其实消耗十分少的工夫和编码供应了一种复杂的平安层。 算是1个熟悉的过程,所以c语言的基础有就更好,没有也不怕。 |
|