Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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 允许人们更改调查答案的解决方案_Javascript_Php_Mysql_Ajax - Fatal编程技术网

Javascript 允许人们更改调查答案的解决方案

Javascript 允许人们更改调查答案的解决方案,javascript,php,mysql,ajax,Javascript,Php,Mysql,Ajax,出于演示目的,假设我有一封每周发送的电子邮件,其中包含红色、绿色和蓝色图像块。电子邮件要求他们选择一种颜色。当电子邮件收件人点击一种颜色(比如红色)时,他们会被带到我的ajax站点,并显示一条消息,感谢您选择红色。通过ajax更新数据库,使“red”增加1。该页面还说,如果愿意,他们可以改变主意,或者干脆关闭浏览器。此消息下方是要单击的三个彩色瓷砖 如果用户决定他们实际上想要蓝色并单击该磁贴,则数据库将红色递减1,然后将蓝色递增1 现在我的问题是用户改变了主意。我所做的是,当页面加载并使用他们的

出于演示目的,假设我有一封每周发送的电子邮件,其中包含红色、绿色和蓝色图像块。电子邮件要求他们选择一种颜色。当电子邮件收件人点击一种颜色(比如红色)时,他们会被带到我的ajax站点,并显示一条消息,感谢您选择红色。通过ajax更新数据库,使“red”增加1。该页面还说,如果愿意,他们可以改变主意,或者干脆关闭浏览器。此消息下方是要单击的三个彩色瓷砖

如果用户决定他们实际上想要蓝色并单击该磁贴,则数据库将红色递减1,然后将蓝色递增1

现在我的问题是用户改变了主意。我所做的是,当页面加载并使用他们的选择更新数据库时,我将通过ajax将唯一的行id发送回页面。这样,如果他们改变主意,我只需将他们的新选择与原始行id一起发送到服务器。我将原始行id减少1,并增加他们的新选择

我的问题是,这似乎不是很安全,因为如果浏览器和最终用户想要查看行id,他们可以看到行id

还有比这更好的方法吗?我不希望他们在第一次加载页面时点击提交,我希望他们只需点击一次电子邮件即可注册投票。然后,如果他们想改变主意,或者干脆离开页面


这是我实际操作的一个非常简单的示例,但任何建议都将不胜感激。

是的,您正在执行的操作可能会受到重播攻击,即您的页面可能会使用相同的POST/GET数据刷新,并通过重播页面来更改您的值。您应该做的是使用分配给用户的唯一键->将其包含在他们的电子邮件URL中,然后当他们单击链接时,他们会被带到一个中间页面,该页面验证URL键,然后为他们提供他们选择的颜色和确认/更改主意选择。在这里你可以更新你的数据库。当数据库更新时,您会以某种方式使密钥无效,因此无法重复使用。您需要记录个人投票,在这一点上,更改一个人的投票就变得微不足道了。您应该使用的系统的工作方式应该与您在某处注册帐户时的工作方式类似,并且您会收到发送到电子邮件的验证链接,以确认您拥有该帐户。如果您采用类似的机制,但将用户带到他们最初选择的颜色,a您想更改您的颜色吗?在同一个页面上,如果考虑逻辑,您可以使系统非常容易地工作。@BigChris遗憾的是,不可能在电子邮件的URL中添加唯一的代码。这些电子邮件不是从我的系统发送的,它们只是图像,周围有链接,插入到电子邮件中。类似href=mydomain.com的内容/red@MarcB我也会记录个人投票,但我也会这样做,我会将唯一的行id发送回去,这样,如果他们改变主意,我就可以编辑/更新该行。这怎么会是微不足道的呢?我不知道投票的用户,就我的网站而言,他们是完全陌生的。