Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止html页面直接访问,但可从链接查看?_Javascript_Html_Redirect - Fatal编程技术网

Javascript 阻止html页面直接访问,但可从链接查看?

Javascript 阻止html页面直接访问,但可从链接查看?,javascript,html,redirect,Javascript,Html,Redirect,好的,所以基本上我已经建立了一个非常低安全性的登录页面(javascript用户名和密码),这不是什么大问题,因为它实际上没有保护任何东西,我只是在我的教会网站上为年轻人创建了一个登录页面,以查看和学习主日学校的材料。我想做的是,这样你就不能直接在你的“个人资料”中输入html或者给它添加书签,我希望他们必须使用javascript登录。例如,脚本会将bob指向他位于bob.html的“profile”,但我只想在它来自login.html的情况下转到bob.html,有没有办法做到这一点而不会

好的,所以基本上我已经建立了一个非常低安全性的登录页面(javascript用户名和密码),这不是什么大问题,因为它实际上没有保护任何东西,我只是在我的教会网站上为年轻人创建了一个登录页面,以查看和学习主日学校的材料。我想做的是,这样你就不能直接在你的“个人资料”中输入html或者给它添加书签,我希望他们必须使用javascript登录。例如,脚本会将bob指向他位于bob.html的“profile”,但我只想在它来自login.html的情况下转到bob.html,有没有办法做到这一点而不会变得非常复杂?我希望没有,但我想我还是会问的。

如果不涉及服务器端编程,您将不得不使用简单的JavaScript重定向,它甚至不被视为“低级别”安全性,而是“非级别”安全性:)

无论如何,您可以使用document.referer检查referer,并在其不正确时重定向到主页,请记住,这很容易被用户操纵

有关document.referer的更多详细信息,请参见此处


如果((document.referer.indexOf('login.html')>0&&username=='someone'&&password=='pass'){do stuff}或者{用户没有从login.html到达,或者用户名或密码错误}

如果这都是来自客户端javascript,那么您就不能做任何真正安全的事情。我想你知道

但是,您可以通过让登录页面中的链接设置一个非常短的过期cookie(如1-5分钟),然后转到配置文件页面,并让配置文件页面默认隐藏所有配置文件内容(通过CSS规则),为临时查看者直接访问设置一个轻微障碍。然后,javascript可以检查加载时cookie是否存在,如果存在,则显示内容


如果查看器试图直接转到配置文件页面,cookie将不存在,页面内容也不会被javascript显示。显然,内容仍然存在于页面中,因此任何了解网页工作方式的浏览者都可以通过其他方式查看内容,但默认情况下不会在浏览器中显示内容。

可以使用多种方案,如jfriend00上面介绍的方案

您还可以使用滚动URL

假设您的个人资料页面位于。将其更改为其中yyMMdd表示当前日期,hhmm表示当前服务器时间。然后确保如果时间不匹配,服务器拒绝提供此页面

很容易看到如果有人将此链接添加到书签中会发生什么。他们的书签最多可以使用一分钟

不幸的是,页面上的链接也将在一分钟内过期。您可以通过大约每分钟更新一次URL来解决这个问题,但这并不像看上去那么简单。您需要考虑用户计算机上的时间可能与服务器上的时间不同这一事实

另一种方法是使用一个。在浏览器关闭之前,会话Cookie是良好的。当您关闭它时,它们会自动过期。这是jfriend00原始答案的变体

希望这有帮助