草庐IT

javascript - 危机/滥用网站中 panic 按钮的最快退出策略?

coder 2023-07-03 原文

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


8年前关闭。







Improve this question




我正在为妇女虐待资源中心做一个网站。很多这样的中心都有被中心称为“ panic 按钮”的东西。一个基本的例子可以找到 here在绿色栏中的每一页的顶部。

链接或按钮的想法是,如果女性正在查看该网站寻求帮助,而施虐者或她们不想认识的人走进房间,则可以快速逃脱。有时链接比关闭浏览器窗口要快得多,这可能是可疑的。

我看到的问题是,我看到的大多数按钮只是将您发送到谷歌或类似的东西。我要做这样的事情:

<a href="http://www.msn.com/#news" rel="noreferrer">LEAVE WEBSITE NOW!</a>

或者
<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://www.msn.com/#news/&#39;"></html>'>LEAVE WEBSITE NOW!</a>

像这样的链接会将您滚动到一些实际内容。它不是一个空白的谷歌搜索,但也不是一个可以被视为可疑的非常具体的东西。

我知道阻止引荐来源网址很好,但即使使用该解决方案,您也可以点击浏览器上的后退按钮并被捕获。对于这个问题,我想我可以这样做:

HTML
<a href="javascript:goNewWin()" rel="noreferrer">LEAVE WEBSITE NOW!</A>

JavaScript
function goNewWin() {
    window.open("backbuttonnewpage.html",'TheNewpop','toolbar=1,location=1,directories=1,status=1,menubar=1,scrollbars=1,resizable=1'); 
    self.close()
}

我发帖是因为这会危及生命,我需要尽可能接近整体解决方案的东西。你会怎么做?

更新 - 14 年 3 月 26 日:
我运行了我正在合作的资源中心发布的一些教育理念,这是他们的答案。 “我们的用户甚至访问我们的网站都需要极大的勇气。当他们来的时候,他们正在寻找一种快速简单的资源来摆脱可能危及生命的情况。在大多数情况下,他们没有时间或精神能力去教育自己以安全的方式浏览我们的网站。当出现“ panic 按钮”的想法时,如果操作得当,似乎是我们治疗的大多数受害者总是要求的资源。

在阅读了这里的很多想法之后,一个完整的解决方案似乎是一个大按钮,它 float 在左侧的恒定位置。当页面加载时,它会在后台加载另一个站点(可能是 ajax 调用),因此单击按钮只会删除覆盖框架。这意味着单击时没有加载时间。为了避免按下浏览器的后退按钮,似乎有必要告诉浏览器不要缓存,并且可能使用replaceState。在每个页面更改以禁用显示该站点的后退按钮。

这仍然是一个非常技术性的问题。辩论很有帮助,但我仍然需要一个可行的技术解决方案。有人认为他们能够将所有这些想法整合成功能性的东西吗?我自己会马上着手处理它,并会发布我想出的任何东西。谢谢大家。

最佳答案

(几乎)最终编辑
好的,我已经阅读了所有评论,这是我认为最好的解决方案,但我也想到了一个 ALL-LOCAL 替代方案。我愿意进一步改进/讨论

var panic= function(){
    document.body.innerHTML = '';
       //this clears the current html in the body 
       //making it look like the page is loading
    
    if(...){ //check if replaceState is supported so no error is thrown
        var title="Decoy Article Title",
        url="/decoypage"; //another endpoint on your server that gives the decoy website
        window.history.replaceState("", title , url); //replace current history entry
    }

    //should be pretty fast up to this point
    window.location.replace("http://www.google.com"); //load the google page or my alternative.
}
我在我的 AWS 实例 54.186.79.95 上放了一个示例 转到该页面,单击按钮,访问另一个页面,然后回击,您现在在 54.186.79.95/decoywebsite 上,并且没有关于您在 54.186.79.95 上的记录/,如果缓存被禁用,您的服务器将看到“../decoywebsite”请求并发送一个诱饵页面。不幸的是,您无法修改整个域,因此您需要该域不可疑。
如果你想摆脱页面内容,我相信最好的方法是使用document.body.innerHTML=''; .从技术上讲,您仍然在页面上,但所有内容都消失了。
下一步是修改浏览器历史记录。 window.history.replaceState ( link to docs ) 是一项 HTML5 功能,可以修改您的历史记录,而无需重新加载页面或向您的服务器发出请求。它非常快,但仅适用于现代浏览器。当用户点击紧急按钮时,我们会将他历史记录中的当前页面替换为假网址。
如果滥用用户点击返回,您的服务器(Php、python 等)将收到带有您的虚假 url 的请求。所以你需要在你的服务器中有另一个端点(如果你不理解端点,请告诉我)。制作与您的原始网站具有相似外观和感觉的良性文章、食谱或天气报告,以免滥用者快速浏览该网站时产生怀疑。还要确保浏览器不使用 <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 进行缓存。标签。
补充说明
  • 理想情况下,您的整个网站(当然除了您的诱饵文章)应该是一个 SPA(单页应用程序),以便它只生成一个浏览器历史记录,而您只需修改那个。
  • 归根结底,我认为你不能制作一个 100% 万无一失的紧急按钮,总有办法绕过它。您只需要找到一个安全性和便利性可以接受的级别。

  • 另一种选择:在本地更改犯罪信息并修改浏览器历史记录
    我也在想如果而不是加载谷歌 , 如果不是最好实际 使用无辜信息在本地转换您的网站 .这看起来不像加载谷歌(每个人都这样做)那么可疑,您可以在本地完成所有操作而无需重新加载页面。
    当他们单击紧急按钮时,您会进行一些快速(且跨浏览器兼容)的 DOM 操作,以更改您网站上的犯罪信息并使其看起来无害(也许只是更改文本,它必须很快)。这样一来,这一切都在本地完成,这在当今的绝大多数浏览器中几乎是即时的。您不必担心重新加载/服务器,因为脚本应该已经加载并准备就绪。如果您保持相同的外观和感觉,看起来用户只是在导航到网站的不同页面。不要从您的网站的外观上看得太明显,这是一个危机网站。当然,您无法导航回原始内容。我还会在紧急按钮上明确说明策略是什么,这样用户就不会 panic 。
    我仍然会尝试更改浏览器历史记录并购买另一个托管诱饵页面副本的域,就像前面的示例一样。不仅在域名可疑的情况下,而且在滥用用户点击刷新或返回其历史记录的情况下。您应该将整个网站设为 SPA,因为您只能修改当前条目,而不能修改过去的历史记录。当然,这仍然只适用于 HTML5 浏览器,只要确保没有抛出错误并且脚本的其他部分仍然在旧浏览器中运行。
    人们怎么想?有什么弱点吗?什么是好的内容可以代替?

    关于javascript - 危机/滥用网站中 panic 按钮的最快退出策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648829/

    有关javascript - 危机/滥用网站中 panic 按钮的最快退出策略?的更多相关文章

    1. ruby - Ping ruby 网站? - 2

      在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

    2. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

      我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

    3. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

      我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

    4. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

      我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

    5. ruby-on-rails - 如何从按钮或链接单击的 View 调用 Rails 方法 - 2

      基本上,我试图在用户单击链接(或按钮或某种类型的交互元素)时执行Rails方法。我试着把它放在View中:但这似乎没有用。它最终只是在用户甚至没有点击“添加”链接的情况下调用该函数。我也用link_to试过了,但也没用。我开始认为没有一种干净的方法可以做到这一点。无论如何,感谢您的帮助。附言。我在ApplicationController中定义了该方法,它是一个辅助方法。 最佳答案 View和Controller是相互独立的。为了使链接在Controller内执行函数调用,您需要对应用程序中的端点执行ajax调用。该路由应调用rub

    6. ruby-on-rails - 如何在 Rails 中添加禁用的提交按钮 - 2

      我在ruby​​表单中有一个提交按钮f.submitbtn_text,class:"btnbtn-onemgt12mgb12",id:"btn_id"我想在不使用任何javascript的情况下通过ruby​​禁用此按钮 最佳答案 添加disabled:true选项。f.submitbtn_text,class:"btnbtn-onemgt12mgb12",id:"btn_id",disabled:true 关于ruby-on-rails-如何在Rails中添加禁用的提交按钮,我们在St

    7. ruby-on-rails - 从 ActiveAdmin has_many 表单助手中删除 "Add new"按钮 - 2

      我在事件管理员编辑页面中有嵌套资源,但我只想允许管理员编辑现有资源的内容,而不是添加新的嵌套资源。我的代码看起来像这样:formdo|f|f.inputsdof.input:authorf.input:contentf.has_many:commentsdo|comment_form|comment_form.input:contentcomment_form.input:_destroy,as::boolean,required:false,label:'Remove'endendf.actionsend但它在输入下添加了“添加新评论”按钮。我怎样才能禁用它,并只为主窗体保留f.ac

    8. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

      我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

    9. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

      我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

    10. ruby-on-rails - 覆盖 Controller 中的 protect_from_forgery 策略 - 2

      我想使用两种不同的protect_from_forgery策略构建一个Rails应用程序:一种用于Web应用程序,一种用于API。在我的应用程序Controller中,我有这行代码:protect_from_forgerywith::exception为了防止CSRF攻击,它工作得很好。在我的API命名空间中,我创建了一个继承self的应用程序Controller的api_controller,它是API命名空间中所有其他Controller的父类,我将上面的代码更改为:protect_from_forgery:null_session.遗憾的是,我在尝试发出POST请求时遇到错误:“

    随机推荐