0

这是一个测试引擎应用程序,我设置了 5 篇论文..as 5 php pages

申请流程

登录.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页......

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

我检查是否设置了 Session 变量......如果设置了......这意味着它已经访问过页面......但是这段代码不起作用......我是否使用了变量 _SESSION ['page' ] 在声明之前???

4

3 回答 3

3

最好的方法是在您的应用程序中构建真正的身份验证和授权。然后,为论文服务的 URL 需要在服务之前验证用户是否被允许查看该页面。

无论您在 check.php 中做什么,都可以在纸页本身上执行。

于 2010-10-24T20:07:05.307 回答
1

很多选择。一对夫妇:

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

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

还有很多,我敢肯定。

于 2010-10-24T20:07:42.140 回答
1

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

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

如果您想拥有更多对访问者友好的 URL,您可以RewriteRule.htaccess文件中使用 a 将漂亮的 URL 转换为您的处理程序可以理解的 URL。(您需要启用mod_rewrite 。)

对于这个特定的问题,这可能有点矫枉过正,但这里有一些安全 Web 应用程序的指南。我认为它们都是相关的:

  1. 将您的敏感信息放在公共网络根目录之外
  2. 默认情况下,不显示任何信息。仅当用户被肯定授权时才启用信息显示。
  3. 理想情况下,这包括 URL(如果他们输入了一个有效的 URL 但他们没有被授权,不要让他们知道他们已经到达了一个有效的 URL)。一种方法是在未经授权的情况下重定向(像您一样设置位置标头)到登录页面。
  4. 创建默认处理程序脚本。这个中央脚本将包含所有需要的文件并调用所有需要的函数。将所有请求信息传递给此处理程序,并让它输出所有 HTML。
  5. #3 的要求:将代码封装在函数和类中。这样,您的默认处理程序可以在准备好时调用它们,只有在您需要它们时才可以调用它们,而不仅仅是因为它们恰好被包含在内。这使您可以更好地控制应用程序的流程。
  6. 与其echo在代码中的随机位置生成 HTML,不如将所有 HTML 输出返回到主处理程序,主处理程序将收集它并在准备好时将其全部输出到一个位置。随机echo散布的 s 更容易出现安全漏洞。
  7. 不要相信用户输入。如果您要使用从$_GETor获得$_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']1。考虑$_SESSION['page']表示允许该用户查看的下一篇论文

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

于 2010-10-26T03:23:17.857 回答