阻止使用 JavaScript / 其他方法访问页面?

Posted

技术标签:

【中文标题】阻止使用 JavaScript / 其他方法访问页面?【英文标题】:Block access to page using JavaScript / other method? 【发布时间】:2012-06-09 23:46:19 【问题描述】:

一些背景

我有一个 tumblog。

我还有一个疯子的前女友。

该人一直痴迷于访问我的帖子,考虑到我们关系的性质(或缺乏关系),我觉得这相当令人不安。我的目标是阻止访问她或任何可能成为她/她的朋友/家人的人,而无需更改我已建立的 URL。

进攻计划

由于我没有在第三方主机上托管我的博客,因此我几乎无法使用有助于阻止她访问的工具。但是,如果有需要的解决方案,我会自己托管。我不是专家,据我所知,javascript 是唯一能让她相信她无法访问我的页面的方法,至少可以欺骗她。

我已经编写了一个脚本,希望真的得到一些指导。使用 jQuery 和 jQuery Cookie 插件,我想出了一些代码来展示我的目标。 让我们开始吧。

var ips = "text:Ips"; // String generated by tumblr: IP addresses separated by a space
var towns = "text:Towns"; // Same but with towns

var iparray = ips.split(" ");
var townarray = towns.split(" ");

$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?",
    function(data) // JSON request that returns geolocation data
        for(i = 0; i < townarray.length; i++)
            if (data['geoplugin_city'] == townarray[i]) // Test to see if user is accessing from a blacklisted town
            
                if ($.cookie('banned_ip_tumblr')) // Looks for evidence of tracking cookie, if found: we stop loading, hide any content that was rendered, and send the user back up to 3 pages. 
                
                    window.stop();
                    $('#all').hide(); // Div that wraps all content in body
                    history.go(-3);
                    history.go(-2);
                    history.go(-1);
                
                else // Sets a cookie destined to be stale. Really stale. Then proceed with hiding posts
                
                    $.cookie('banned_ip_tumblr', 'true',  expires: 365, path: '/' );
                    $('#all').hide();
                    history.go(-3);
                    history.go(-2);
                    history.go(-1);
                    window.stop();
                        
            
        
        for(i = 0; i < iparray.length; i++)
            if (data['geoplugin_request'] == iparray[i]) // Same as above, IP style.
            
                if ($.cookie('banned_ip_tumblr'))
                
                    window.stop();
                    $('#all').hide();
                    history.go(-3);
                    history.go(-2);
                    history.go(-1);
                
                else
                
                    $.cookie('banned_ip_tumblr', 'true',  expires: 365, path: '/' );
                    window.stop();
                    $('#all').hide();
                    history.go(-3);
                    history.go(-2);
                    history.go(-1);
                
            
        
    
);

if ($.cookie('banned_ip_tumblr')) // If the user has been caught but is now connecting from a new host, there is a chance this will catch them

    window.stop();
    $('#all').hide();
    history.go(-3);
    history.go(-2);
    history.go(-1);

已知故障点

如果用户禁用了 JS,或者正在使用插件过滤 JS,这将失败。 如果用户使用的是移动设备(使用 iPod touch 测试),这将 失败。 如果用户使用的是 Internet Explorer,这将失败。 如果用户使用网络代理,这将失败。

结束思考

这不是我基于 IP / 地理位置阻止访问的理想方法,但是,这是我目前所知的最好的方法。我所处的情况让我感到不安,但我也认为这是一个机会,可以探索一些不太常见的方法来阻止用户访问。我很高兴听到任何没有 JS 的解决方案以及那些可能的解决方案。

请指出我的错误(我相信有很多),因为它们体现在我的代码和/或概念中。我想养成写代码的习惯。

这是我在 Stack 的第一篇文章,尽管我在整理项目时多次使用这个社区。感谢您花一些时间阅读并考虑我的问题,我期待得到一些意见。

【问题讨论】:

您有一个 Tumbler 帐户,他们允许您将 javascript 发布到您的页面?或者这是你自己托管的一些微博?作为一个低技术的解决方案,为什么不停止发布? Tumblr 允许在主题中完全自定义客户端语言 我会将他们重定向回他们的仪表板而不是window.location = "http://tumblr.com/dashboard" If the user has JS disabled, or is using a plug-in to filter JS, this will fail. OP 回答了他自己的问题.. JS 不是一种有效的方法。 @ThinkingSites '如果她发现我上周末的所作所为,这并不是世界末日,但我非常想让她为难。 【参考方案1】:

自己托管不会有什么不同。事实上,我很确定你不能,你需要将域指向他们的服务器。

我想说的是,你所拥有的就是最好的。就像您提到的那样,有一些方法可以解决它,但这是客户端脚本的典型情况。

除非 tumblr 有一个变量用于查看您网站的人的登录名,否则没有什么可做的。即使这样,他们也可以退出。

我建议在您的 tumblr 设置中阻止它们,考虑使用密码保护您的博客,或更改您的网址(您仍将保留您的关注者)。

【讨论】:

它们通过 JSON 输出输出解析和显示您的帖子所需的所有博客信息。考虑到这一点,我想到禁止使用 .htaccess 的 IP 范围会阻止提供任何后期数据。不幸的是,它们不允许您访问查看您页面的人的用户信息。另一个缺陷——如果您阻止用户,然后他们更改了他们的 URL,您的阻止列表将反映名称更改。无赖!【参考方案2】:

你没有列出的三个重要的失败点:

/archive /mobile /api/read (认为​​他们无法转到第 2 页?/api/read?start=50 怎么样?)

您列出的无效故障点:

移动设备。 (除非您在谈论 /mobile,在这种情况下,我的错。)您可以通过将移动主题粘贴到 /iphone-theme 的自定义布局页面来自定义移动设备的主题,或者您可以通过取消选中它来完全禁用它盒子:

【讨论】:

以上是关于阻止使用 JavaScript / 其他方法访问页面?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止对我的 JavaScript 文件的直接访问?

Ajax 调用阻止其他 javascript 代码

阻止 javascript 禁用的用户访问 wordpress 网站

使用 php/javascript 或 jquery 提交 form2 时阻止其他 form1 提交

如何使用响应式文件管理器 9 阻止其他文件夹访问

阻止用户访问其他路由 - ReactJS - React-Router -