有没有办法用jQuery限制对http://www.example.com/subpage等特定网页的访问?
我知道还有很多其他可行的方法可以通过PHP和.htaccess
实现这一点,但在我们的例子中,我们无法访问.htaccess
文件。但是安装了jQuery。
我正在考虑尝试阅读window.location.href
并向网址添加哈希值。但是,如果用户查看相关页面的源代码,我不确定是否可以公开。
答案 0 :(得分:2)
我实现了Felix Kling的想法并编写了一个node.js脚本来自动化该过程。基本上它将您的(原始)HTML页面和密码作为输入,并生成嵌入原始加密副本的HTML页面。当您浏览到此生成的HTML页面时,它会提示您输入密码以解锁它。
这只是一个概念证明,所以你需要做很多工作才能使这个生产准备就绪。例如,如果输入错误的密码,肯定会想要一些友好的错误消息。每次在网站上的页面之间移动时输入密码可能会非常恼人,因此您可以考虑将密码保存在cookie中或每次都在URL中传递密码。此外,按照目前的设计,您只能拥有一个人人共享的密码。这是一个可解决的问题,只需为每个唯一的用户名/密码对重新加密一次主密钥,并将所有数据放在网页中。
无论如何,here's a demo(密码是“ItWorks”)。我为工具on GitHub添加了代码。
为什么这种方法不是特别安全有很多原因,但是如果你真的关心安全性,那么你就可以通过.htaccess和脚本支持来进行网络托管了,对吗? :)
答案 1 :(得分:1)
在客户端限制访问是有风险的,并且可能有很多方法可以解决它。您可能无法访问.htaccess,但是您不能使用php吗?
不保证这个想法:
您需要使用javascript来加载您不会通过ajax显示的页面部分。如果不这样做,如果他们禁用了javascript,则可以轻松看到要阻止用户看到的页面部分。你当然可以根据页面需要有什么数据来有条件地执行ajax加载,以表明用户是真实的,但这很容易被欺骗。此时,您还必须与服务器通信,那么为什么不限制访问呢?
如果你只是担心保持愚蠢(即非开发者)的用户可能会有用。
答案 2 :(得分:1)
来自我的评论:
您可以使用Ajax加载页面的一部分,如@tandu suggests it,但将它们加密存储在服务器上。
在客户端,让用户输入密码并使用您用于解密接收数据的加密算法的JavaScript实现。只要确保你使用一些经过良好测试的实现,而不是自己创建一个!
这也可能不是很安全,但有两个好处:
缺点是:
此外,您必须确定解密是否成功。
答案 3 :(得分:0)
简答:不,你不能。
答案稍长:你的所有javascript都会发送给用户,看看。您无法隐藏任何源代码。使用PHP / htaccess,您的所有源代码都是隐藏的,因此无法告诉您如何处理数据。
答案 4 :(得分:0)
因为很多人已经说不了。我不妨用PHP发布这个答案。
如果仅包含这些文件,则可以在包含文件中使用define()
。然后,您包含的文件将检查已定义的常量,如果未找到则立即退出。这样,您可以确保其余代码仅在include中解释。
如果我们只是谈论用户访问级别(即这些文件可能通过HTTP调用但在用户中受到限制,那么您必须使用sessions
并为每个页面的用户设置适当的访问级别将检查并采取相应行动
答案 5 :(得分:0)
要在JavaScript中执行此操作(如您提到的那样使用jQuery),您只需在需要时检查password
输入的值,并将其与预定义的进行比较密码。
免责声明我永远不会推荐这个。我甚至只是发布了一个答案,因为你已经明确表示用户是否可以看到来源并不重要。
话虽如此,假设一些HTML如下:
<input type="password" id="pass">
<input type="button" id="b" value="Login">
<span id="err"></span>
你可以使用类似的一些JS:
$("#b").click(function() {
var password = "password";
if($("#pass").val() !== password) {
$("#err").text("Incorrect password");
}
else {
$("#err").text("Password correct! Do whatever you need to do here.");
}
});
在行动here中查看它(也请注意查看密码是多么容易!)。