如何防止用户通过编写URL直接访问我的html页面?

时间:2015-05-25 07:31:20

标签: php authorization

我想要一个没有数据库的硬编码登录页面( login.html )。 如果某人填写了正确的用户名和密码,则会重定向到( page2.html )。

现在我的问题是,如果一个人直接为page2.html写了URL,他就可以访问它而无需登录。

理想案例 => www.example.com/login.html =>如果正确=> www.example.com/page2.html

问题案例 => www.example.com/page2.html => page2.html,NO LogIN :(

8 个答案:

答案 0 :(得分:2)

你可以通过这样的php会话来控制所有这些

  //set the session on the login page
   $_SESSION['loggedIn'] = true;  

 //on the second page you check if that session is true, else redirect to the login page  
  if($_SESSION['loggedIn'])
      //allow
  else
      //redirect to the login page
      header('Location: /login.html');  

session是一种存储要在多个页面中使用的信息(在变量中)的方法。默认情况下,会话变量会持续到用户关闭浏览器为止。

为简单起见,您可以将网页更改为php(例如login.php)。

  • 第1行:在login.php页面中,您将首先检查用户名和密码是否正确,如果是,请设置$_SESSION['loggedIn'] = true

  • 第2行:在第二页(page2.php)中,您将首先检查用户是否通过检查会话是否具有值if($_SESSION['loggedIn']) {//allow processing}来登录

  • 第3行:如果该会话变量为空,则表示用户未登录,将其重定向到登录页面else { header('Location:/login.php');}

答案 1 :(得分:2)

首先,我不知道您如何将密码和用户名与某些内容进行比较,并检查其是否正确,但是现在我会做类似的事情(同样,这没有数据库)。 / p>

您有2个选择:使用如上所述的会话,或者使用更简单的方法:只需使用isset()函数。

<form action="page2.php" method="POST">
  <input type="text" name="userName" required>
  <input type="password" name="password" required>
  <button type="submit" name="submit">Send!</button>
</form>

page2.php将包含以下代码:

if(!isset($_POST['submit']) {
  //direct back to a certain page, could look like this:
  header('Location: xxx.php');
  exit();
  //exit() prevents the code from running, it litterly EXITS the code as soon as it hits that line.
} else {
  //direct to page2.php
}

让我们分解一下:为什么我使用扩展名.php?因为您不能仅使用HTML来做到这一点。

为什么我使用(!isset())而不是isset()?因为一种好的习惯是首先考虑安全性,所以您不必进入重要区域,然后检查某人是否具有致命武器。您先检查一下,然后再允许他进入或访问denie。这是一种非常简单且通用的方法,可以防止某人使用URL访问您的页面,但是SESSION更好,而且经验更丰富。

答案 2 :(得分:1)

使用纯HTML解决方案无法解决此问题。你的问题被标记为php,所以我的答案基于:

  1. 将您的表单发布到php脚本(例如login.php)
  2. 脚本检查登录详细信息和sets a cookie
  3. page2.html必须是php,并在显示HTML之前检查cookie
  4. 另一种选择是使用HTTP身份验证,请参阅this article获取教程。

答案 3 :(得分:1)

您可以在服务器安全设置中阻止该页面从外部位置访问, 然后在php中使用fil_get_contents('page2.htm')成功登录后,将该页面的html发送到浏览器。 php在服务器上运行,因此文件请求不会来自外部源。你可以使用javascript覆盖页面上的html,或者你可以echo php中if上的内容显示else上的正常页面

例如

if(isset($_GET['Login'])
{
    //check login details
    //if(....) //put your login check logic here
    {
        echo file_get_contents('page2.html');
    }
    else
    {
        //normal page's code goes here
    }
}
  

注意:如何设置文件以禁止外部访问超出了我的答案范围

答案 4 :(得分:0)

使用login.php的完整路径更改网站的默认路径。下次当任何用户输入您的网址时,他们将被重定向到给定路径,即您的路径&gt; login.php

希望它会有所帮助。

答案 5 :(得分:0)

如果您使用的是Asp.net,也许您可​​以使用TempData。他们留在页面之间的会话。

if (/*username and password are correct*/){
    TempData["LoggedIn"] = "True";
} else {
    TempData["LoggedIn"] = "False";
}

然后,当您的控制器尝试加载page2时,您只需检查TempData的值。

var validate = TempData.Peek("LoggedIn");
if (validate == null || validate.ToString() == "False"){
    return RedirectToAction("login");
} else {
    /*allow access to page*/
}

使用.Peek保留TempData,因为如果访问它,通常会将其标记为删除。您还希望将其检查为null,因为如果用户没有首先浏览登录页面,则可能从未分配过它。

答案 6 :(得分:0)

我有同样的问题,发现了这个并且它完美地工作:(在javascript中) 只需将其放在文档的顶部即可。

[^ing]

答案 7 :(得分:0)

您可以通过检查用户是否已登录来防止这种情况发生

// If the user is not logged in redirect to the login page...



if (!isset($_SESSION['loggedin'])) {
        header('Location: login.php'); //here you put your login page
        exit;
    }