>  기사  >  백엔드 개발  >  PHP는 텍스트 파일을 암호화하고 특정 페이지에 대한 액세스를 제한하는 효과를 구현합니다.

PHP는 텍스트 파일을 암호화하고 특정 페이지에 대한 액세스를 제한하는 효과를 구현합니다.

WBOY
WBOY원래의
2016-12-05 13:28:141172검색

파일 암호화 절차는 사이트에서 널리 사용되며, 이는 데이터베이스를 사용하여 비밀번호와 사용자 이름을 저장하는 것을 의미합니다. 세부 내용은 다음과 같습니다.

1. 소개

일반적으로 사이트는 매우 단순하여 데이터베이스를 전혀 사용할 필요가 없지만 사이트에서 특정 페이지에 대한 액세스를 제한하려는 상황이 있을 수 있습니다. 일반적으로 이는 데이터베이스를 사용하여 비밀번호와 사용자 이름을 저장하는 것을 의미합니다. 그러나 더 쉬운 방법이 있습니다. 보안은 다소 떨어지지만 최소한의 코딩만 필요합니다.

웹 애플리케이션에서 데이터베이스를 사용하는 경우 이미 비밀번호와 사용자 이름을 어딘가에 저장할 수 있고 방문자를 인증할 수 있는 방법이 있습니다. 하지만 사이트의 보안이나 복잡성으로 인해 데이터베이스 사용이 보장되지 않으면 어떻게 되나요? 특정 사람들만 사이트의 특정 페이지나 영역에 액세스할 수 있도록 하려는 경우가 있을 수 있습니다. 이를 수행하는 매우 간단한 방법은 비밀번호를 저장하는 텍스트 파일을 사용하고 방문자에게 비밀번호를 입력하라는 메시지를 표시하는 페이지를 만드는 것입니다. 비밀번호가 텍스트 파일에 저장된 것과 일치하면 사용자는 해당 페이지에 액세스할 수 있습니다. 제목은 제한된 페이지입니다. 그렇지 않으면 페이지 새로 고침을 시작하기 전에 액세스를 비활성화하는 적절한 메시지를 표시합니다.

추가 보안을 위해 해싱을 사용하여 텍스트 파일에 저장된 비밀번호를 암호화할 수도 있습니다. 그러면 내용이 어떻게든 발견되더라도 알아내기가 어려워집니다. 이들 모두는 PHP 메소드를 사용하여 구축할 수 있으며 최소한의 코딩만 필요합니다.

시작하기 전에 PHP를 테스트하고 사용할 수 있는 환경을 설정해야 하므로 먼저 PHP용 웹 서버를 설치하고 구성해야 합니다. Apache는 PHP와 잘 작동하고 설치 및 구성이 쉽기 때문에 이 옵션을 권장합니다.

다음으로 페이지를 만들어야 합니다(아래 이미지와 유사). 이 페이지에는 방문자로부터 비밀번호를 받을 수 있는 텍스트 상자와 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"。

四、 加密

现在,我们开始分析在前面提到的加密问题。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으로 문의하세요.