我们有一个触发电子邮件的HTTP GET URL。该URL是通过邮件发送出来的,因此无法在没有进一步后果的情况下将其设为POST URL。
目前我们面临的问题是用户每天都会多次收到此类确认邮件。
我的理论是,URL会在某个标签页中打开,或者每次用户打开浏览器时都会预先提取,从而触发电子邮件。
是否有可能告诉"浏览器不自动加载这样的URL?
或者是制作确认页面的唯一选项,需要额外点击按钮?
用户代理是"" Mozilla / 5.0(Windows NT 6.1; WOW64; rv:27.0)Gecko / 20100101 Firefox / 27.0"
编辑:网址基本上是公开的,但它有一个用户标识令牌。我知道浏览器要求确认rePOST数据,但我不要求对GET URL进行此类确认。 我知道这一事实,GET URL不应该引起任何更多的操作,但在这种特定情况下,我们在电子邮件的按钮中有URL,并希望直接引起操作。
所以我的问题更像是:"我可以告诉浏览器这个URL 危险要调用两次,即表现得像是一个POST URL,例如特定的报头"
答案 0 :(得分:1)
浏览器通常不允许来自特定域的此类代码段执行,因为从最终用户浏览器的角度来看,这些代码段被视为安全漏洞。您的理论对我来说似乎是正确的,因为当我断开连接并将笔记本电脑重新连接到互联网时,通常所有Chrome浏览器的标签都会在点击它们时刷新。您可以从负载均衡器或Web / app服务器日志中获取用户计算机的IP以确认一次。
但即使您找到了“告诉”浏览器的解决方案,我相信并非所有浏览器都允许。拥有一个确认页面和/或使其成为一个POST调用肯定会使它变得健壮(考虑到搜索引擎也可能偶尔会调用公开暴露的GET URL来刷新它们的索引)。
GET,HEAD,OPTIONS和TRACE方法被定义为安全的,这意味着它们仅用于检索数据。这使得它们也是幂等的,因为多个相同的请求将表现相同,但这里的事情似乎与GET有点不同:D
如果这不能改变,另一种方法可能是限制特定时间间隔内特定用户的电子邮件数量,所有这些都是从服务器端完成的。
请参阅此处的相关讨论:Can I disable browser refresh in my webapp?