2011-12-29 99 views

回答

6

您可以将Location标题发送到正在处理表单输入的脚本中的其他URL。这个新的URL将可用于浏览器而无需发送表单数据。

+0

我用这个。非常感谢。在处理完想要发生的事情之后,我刚刚重定向了同一页面。 – Darren 2011-12-29 21:39:27

1

我不认为有这样做的好方法。我们过去完成这项工作的方式是在日期和日期之间设置一个最短时间last_modified。如果你还没有等一个小时就说,这个帖子会被拒绝。

4

停止一个你无法控制的客户端(浏览器)从做一些事情是不可能的。然而,有可能 - 对你来说很容易 - 硬化您的应用程序在此:

  • 当你表现形式,创建一个随机令牌,将其存储在会话中,并将其添加到窗体作为隐藏现场
  • 当您收到填好的表格,检查令牌对会话,如果它不匹配忽略的数据,如果它不匹配清除会话令牌和处理数据

任何标题或其他技巧可能会或可能不适用于浏览器和人们刷新没有MALICE,但他们definitly不会帮助攻击者。

1

我知道的唯一诀窍就是让表单提交返回一个带有链接的页面,您可以通过javascript(元刷新,无论什么)单击链接到第三页。

这个想法是当你打F5时最终刷新的东西是链接页面而不是表单提交页面。

5

使用邮政/重定向/获取:http://en.wikipedia.org/wiki/Post/Redirect/Get

在PHP程序

以代码的形式,那么不输出任何东西把这个header('Location: http://www.example.com/foo.php');(显然替换URL),做另一个页面上的显示。如果你需要传递任何东西到该页面,然后使用查询字符串和$_GET[]

1

在我寻求解决这个问题,我一直采取一些不同的方法。在自行开发的MVC环境中,我重定向了两次页面。确保数据被提交到数据库后,我把它重定向到

header("Location: http:// .... /redirect/blogcomment 

这会打电话给我的“重定向”类和“blogcomment”的方法。在这里,它会再次被重定向到“引用者”。

public function blogcomment() { 
    $ref = $_SERVER['HTTP_REFERER']; 
    $page = "Location: " . $ref . "#commentform"; 
    header($page); 

} 

这将清除POST阵列和通过只是在表单字段的前面添加一个锚定标记,我跳转回该位置。当然,我也可以自定义我的重定向。到目前为止,它的功能就像一个魅力

-1

双重负载...即将页面重定向回自己是不好的做法。尝试调试一个这样做的应用程序,这使得更难以意识到正在发生。对于上帝之人的爱,如果你需要php提交一个表单,先将它发送给一个单独的脚本,然后返回,如果你想再次删除发送表单的刷新,则更容易调试!

-1

尝试做:

unset($_POST); 

为最后一个命令。