这是一个测试引擎应用程序,由我设置了5篇论文..作为5个php页面
申请流程
Login.html
check.php //检查凭证是否正确
如果正确则
main.php //用户点击此页面中的“take test”,显示5篇论文中的1篇...
但是一旦我登录,我就可以将网址更改为我想要的试卷网址。论文名称为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页......
在eac页面中我有这个代码......我检查是否设置了Session变量....如果设置了......这意味着它已经访问了页面.....但是这段代码不起作用...我使用变量_SESSION [ '页'] 在宣布之前???
答案 0 :(得分:3)
最好的方法是在应用程序中构建真正的身份验证和授权。然后,提供纸张的URL需要验证用户是否可以在提供之前查看该页面。
无论你在check.php做什么,都要在纸质页面上进行。
答案 1 :(得分:1)
很多替代品。一对夫妇:
不要在网址中对纸张名称进行编码,而是从名为test-paper.php的页面中返回所选纸张的内容。
跟踪用户有权在用户会话中看到的论文。检查每个测试纸页面是否允许用户查看此页面,如果不是,则返回403 Forbidden(或错误页面)。
更多,我确定。
答案 2 :(得分:1)
您遇到的问题大多可以通过在默认处理程序脚本周围安排代码来解决。 (参见下面的指南。)
将信息传递给这样的脚本有两种基本方法(正如我在上面的评论中所说)。基本方法是通过GET变量,如http://www.example.com/main.php?p=1
。
如果您想拥有更多访问者友好的网址,可以使用.htaccess
文件中的RewriteRule
将不错的网址转换为您的处理程序可以理解的网址。 (您需要启用mod_rewrite。)
对于这个特定问题,这可能有些过分,但这里有一些安全网络应用指南。我认为它们都是相关的:
echo
,将所有HTML输出返回到主处理程序,这将收集它并在准备好后将其全部输出到一个位置。散布在周围的随机echo
会使安全漏洞更容易突然出现。$_GET
或$_POST
获得的值,请在使用之前确保它是有效值。修改强>
(这是更具体的,并且直接针对您的代码)
3个原因导致您的代码无法按预期运行:
您在第一行if(!isset($_SESSION['page'])
上遗漏了一个右括号。
编写代码的方式,如果用户访问页面时已设置$_SESSION['page']
,则会将其重定向到登录页面。您可以通过将header('Location:login.php');
exit;
放在if
子句中并完全删除else
子句来解决此问题:
if(!isset($_SESSION['page'])) {
header('Location:login.php');
exit;
}
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];
您需要在首次登录时设置$_SESSION['page']
,以便他们能够查看第一页。
我建议使用$_SESSION['page']
的整数而不是脚本名称。这样,您可以在登录时将$_SESSION['page']
设置为1,并且每次成功查看页面时,将$_SESSION['page']
递增1。考虑$_SESSION['page']
表示允许该用户查看的下一篇论文。
您可以在每张纸上设置$pageid
。每次他们尝试查看网页时,如果$_SESSION['page']
小于$pageid
,请不要让他们查看该网页。