【问题标题】:How Does Website Access Control Actually Work?网站访问控制实际上是如何工作的?
【发布时间】:2011-08-02 07:27:12
【问题描述】:

我刚刚开始学习 Web 开发,现在有一些事情一直困扰着我,网站如何控制您可以访问和不能访问的内容。

例如,像 Facebook 这样的网站。当我第一次访问该站点时,它会显示一个登录表单,一旦我登录了我之前尝试访问的同一页面,现在会显示与我相关的信息,我只能在登录后访问,我可以导航到不同的站点并且然后回到谷歌,它仍然允许我在不重新登录的情况下使用。

当某人未登录时,网站将如何阻止试图访问特定页面的人,比如说页面viewProfile.php。网站如何知道允许谁访问此页面?

我意识到这个问题可能看起来令人困惑和基本,但这只是我在查看 facebook 时遇到的问题。

谢谢。

【问题讨论】:

  • sessions\cookies ,现在去做一些研究。
  • @Dragon,他正在研究你 pleb!
  • 要求某人第 400 万次输入 100 万个地方有据可查的东西不是研究。
  • 标记一个已接受的答案。

标签: php web-applications security


【解决方案1】:

这是一个非常简单的概念,称为会话。

当您访问 facebook 时,它会读取通过连接发送给它的唯一信息,例如 IP 地址、浏览器和其他一些次要信息,当这些信息结合起来时,它会创建一个唯一标识符。

然后这个唯一标识符被存储在一个文件中,如下所示:

 d131dd02c5e6eec4693d9a0698aff95c.session

因此,当您使用凭据登录时,应用程序会将信息添加到此文件中,例如上次活动等。

当您离开并返回时,Facebook 将读取随每个请求发送的信息,然后将所有信息加在一起并创建一个唯一的哈希值,如果此哈希值存在于其存储系统中,它将打开并读取内容,并确切地知道你是谁。

所有这些都与 cookie 相结合,唯一的哈希被发送回浏览器并存储在您的 cookie 文件夹中,这个 cookie 文件会在每次请求时发送回 facebook。

PHP 会在内部为您处理此问题,因此启动和运行它是非常基本的:http://php.net/manual/en/features.sessions.php

这里有一个例子可以帮助你更深入地理解这个概念。

<?php
/*
    * The session_start generates that hash and send a cookie to the browser
    * This has to be first as you can only send cookie information before any content
*/
session_start();

/*
    * Anything storeg within $_SESSION is what's been read from the session file and
    * We check to see if the information has already been set on the first time the user
    * visited the site
*/
if(!isset($_SESSION['hits']))
{
    $_SESSION['hits'] = 0;
}

/*
    * Now we increment the value every time the page is laoded
*/
$_SESSION['hits']++;

/*
    * now we display the amount's of hits the user has loaded the page.
*/

echo 'You have vistited this site <strong>' . $_SESSION['hits'] . '</strong> times.';

?>

如果您加载此页面然后按 F5,会话值会在每次请求时递增,因此您应该会看到如下内容:

  • 您已访问此网站 1 次。
  • 您已访问此网站 2 次。
  • 您已访问此网站 3 次。
  • 您已访问此网站 4 次。
  • ...

会话文件对每个访问者都是唯一的,这意味着当在 PHP 中使用会话变量时,它只适用于该用户,因此每个人都可以获得自己的单独会话。

在您研究时,可以在 StackOverflow 中搜索某些标签,例如 PHP 和会话。

https://stackoverflow.com/questions/tagged/php+session

这是一个关于 cookie 和会话优势等的好问题。

Purpose Of PHP Sessions and Cookies and Their Differences

【讨论】:

    【解决方案2】:

    网站使用称为“cookie”的东西在您的计算机上存储信息。

    此信息可以包含任何文本字符串,但在这种情况下,它可能是 Facebook 知道(可能存储在某个数据库中)与某个用户相关联的唯一 ID。 Cookie 只能由发送它们的网站和浏览器本身读取。

    登录页面向脚本发送一个 POST/GET 请求,该脚本通常根据数据库中的数据检查用户名/密码组合。如果发现数据有效,则允许用户访问网站登录页面(登录后的页面)并存储 cookie。如果不是,则返回错误消息。

    Cookie 也可以有一个“生命周期”。这个生命周期可以是任何东西:一定的秒数;直到您离开网站;直到您关闭浏览器;或永远(可能还有更多。)

    发送 cookie 的网站也可以在 cookie 过期之前将其删除。这就是大多数“注销”按钮的工作方式。

    【讨论】:

      【解决方案3】:
      1. 要只允许登录的用户查看内容,您可以首先检查他们已登录的标志,例如查找活动会话以及它有一个标志告诉您他们已登录(您可以控制)。在页面顶部的 PHP 中,您可以简单地:

        <?php session_start();
            if(!isset($_SESSION['loggedin'])){
                header('Location: http://example.com/login.php');
            }    
        ?>
        

        这会将未登录的用户重定向到登录页面。成功登录后,您应该将 $_SESSION['loggedin'] 设置为一个值。

      2. 要检查是否允许登录的人查看特定的个人资料,只需查找页面仅限于朋友的位置,如果是,则检查登录用户的 id 是否在个人资料所有者的数据库中的朋友字段。

      【讨论】:

        【解决方案4】:

        这是通过 cookie 完成的。当您登录时,该网站会在您的浏览器中放置一个 cookie 一段时间(通常很长一段时间,以便您可以保持登录状态)。当您再次访问该站点时,您的浏览器会将 cookie 发送回该站点(并且该站点会设置一个新的 cookie)。在任何浏览器中,您都可以在选项中的某处找到 cookie 列表。

        如果您想了解更多关于 cookie 的信息,可以阅读维基百科:http://en.wikipedia.org/wiki/HTTP_cookie

        【讨论】:

          【解决方案5】:

          在 Google 上搜索“会话管理”。

          总结

          当您登录网站时,您会获得一个唯一的 ID。该 id 从数据库中提取您的数据,然后使用您的数据填充动态页面,例如 viewProfile.php。所以每个用户都会拉取同一个文件 viewProfile.php,但会根据他们的唯一 ID 得到不同的结果。

          【讨论】:

            猜你喜欢
            • 2016-03-21
            • 2011-09-19
            • 1970-01-01
            • 2019-01-01
            • 2017-07-05
            • 1970-01-01
            • 2021-01-21
            • 2011-09-27
            • 2021-12-16
            相关资源
            最近更新 更多