这是一个测试引擎应用程序,其中有我设置的 5 篇论文..as 5 个 php 页面

申请流程

登录.html

check.php // 检查凭据是否正确

如果正确的话

main.php //用户单击此页面中的“参加测试”,该页面将显示 5 篇论文中的 1 篇...

但是一旦我登录,我就可以将 url 更改为我想要的试卷的 url..试卷名称 r 1.php 2.php....

我该如何阻止这个...?

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

这是正确的吗……正如我所说,有 5 页……

在每个页面我有这个代码......

我检查是否设置了会话变量...。 ]在宣布它之前???

有帮助吗?

解决方案

您遇到的问题主要可以通过围绕默认处理程序脚本安排代码来解决。(请参阅下面我的指南。)

有两种基本方法可以将信息传递给这样的脚本(正如我在上面的评论中所说的)。基本方法是通过 GET 变量,例如 http://www.example.com/main.php?p=1.

如果您想拥有更多对访问者友好的 URL,您可以使用 RewriteRule 在一个 .htaccess 文件将漂亮的 URL 转换为处理程序能够理解的 URL。(你需要 模组重写 已启用。)

对于这个特定问题来说,这可能有点过分了,但这里有一些安全网络应用程序的指南。我认为它们都是相关的:

  1. 放置您的敏感信息 在公共网络根之外.
  2. 默认不显示任何信息. 。仅在用户获得明确授权的情况下才启用信息显示。
  3. 理想情况下,这包括 URL(如果他们输入有效 URL 但未获得授权,请不要让他们知道他们已到达有效 URL)。一种方法是如果未经授权,则重定向(像您一样设置位置标头)到登录页面。
  4. 创建默认处理程序脚本。 该中央脚本将包含所有需要的文件并调用所有需要的函数。将所有请求信息传递给此处理程序,并让它输出所有 HTML。
  5. #3 的要求: 封装你的代码 在函数和类中。这样,您的默认处理程序就可以在准备好时调用它们,只有当您需要它们时,而不仅仅是因为它们碰巧被包含在内。这使您可以更好地控制应用程序的流程。
  6. 代替 echo在整个代码中的随机位置使用 HTML, 将所有 HTML 输出返回到主处理程序, ,它将收集它并在准备好后将其全部输出到一个地方。随机的 echo分散的地方更容易出现安全漏洞。
  7. 不要相信用户输入. 。如果您要使用从中获得的值 $_GET 或者 $_POST, ,在使用之前请确保它是有效值。

编辑:

(这更具体,并且针对您现在的代码)

您的代码无法按预期运行的 3 个原因:

  1. 您在第一行遗漏了右括号 if(!isset($_SESSION['page']).

  2. 你的代码的编写方式,如果 $_SESSION['page'] 当用户访问该页面时已经设置,他们将被重定向到登录页面。您可以通过将 header('Location:login.php'); exit; 在里面 if 条款并删除 else 条款完全:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. 你需要设置 $_SESSION['page'] 当他们第一次登录时,他们将能够查看第一页。

我建议使用整数 $_SESSION['page'] 而不是脚本名称。这样你就可以设置 $_SESSION['page'] 当他们登录时为 1,并且每次他们成功查看页面时,都会递增 $_SESSION['page'] 一个。考虑 $_SESSION['page'] 意思是 允许该用户查看的下一篇论文.

您可以设置一个 $pageid 在每张纸上。每次他们尝试查看页面时,如果 $_SESSION['page'] 小于 $pageid, ,不要让他们查看该页面。

其他提示

最好的办法是建立真正的身份验证和授权到应用程序中。然后,供应纸需要的URL,以验证用户被允许服务之前查看的页面。

不管你在做check.php,做纸页本身上。

有很多选择。一对夫妇:

  • 不要在 URL 中对论文名称进行编码,而是从名为 test-paper.php 的页面返回所选论文的内容。

  • 跟踪用户有权在用户会话中查看的论文。检查每个测试试卷页面是否允许用户查看该页面,如果不允许,则返回 403 Forbidden(或错误页面)。

我确信还有更多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top