PHP来自类似GET的POST方法

PHP来自类似GET的POST方法,php,forms,http,post,Php,Forms,Http,Post,可能重复: 我知道出于安全原因,使用POST方法比GET方法更好。 无论如何,如果您有多个网页,并且您想在它们之间导航,如果您使用POST方法,则如果您按“后退”或“前进”按钮,浏览器将重新提交以前表单的数据。 有一种方法可以使用POST方法,但允许用户在上一页或下一页之间导航,而无需重新提交数据? 我不知道POST和GET之间是否没有安全性差异。如果您不想出现重新提交问题。你应该遵循这个模式 编辑: 对于所有在安全方面看到不同的人 LI>你可以通过中间人在纯文本(而没有HTTPS)中嗅到

可能重复:

我知道出于安全原因,使用POST方法比GET方法更好。 无论如何,如果您有多个网页,并且您想在它们之间导航,如果您使用POST方法,则如果您按“后退”或“前进”按钮,浏览器将重新提交以前表单的数据。 有一种方法可以使用POST方法,但允许用户在上一页或下一页之间导航,而无需重新提交数据?
我不知道POST和GET之间是否没有安全性差异。如果您不想出现重新提交问题。你应该遵循这个模式

编辑:

对于所有在安全方面看到不同的人

    <> LI>你可以通过中间人在纯文本(而没有HTTPS)中嗅到其中的任何一个。
  • 您可以重新发送这两个请求
  • 您可以为这两种方法发明安全令牌
  • 唯一的区别是POST不会通过URL标识符公开信息。但攻击者总是会检查源代码
让POST在数据库中插入数据等不是因为安全性。这是因为广泛使用的REST范式。但是开发web应用程序时,REST范式不是必须的。它就像任何标准一样,你可以遵循它的指导方针,也可以不去管它


顺便说一句,在同样的主题上也有一篇很好的帖子,有同样的发现:

使用post方法并不一定比GET更安全。 为了在不同的页面之间浏览,像?page=home这样的东西是完全可以的,只要您在处理输入之前检查输入。
我知道没有办法阻止浏览器要求重新发送数据,因为有充分的理由询问用户是否想再次发送数据。

POST并不比GET好。如果你想做一个改变数据库(写)的操作,POST更合适。得到的是。。。从数据库中获取内容(读取)。因此,要在页面之间导航(和分页),使用GET没有什么错。

在脚本中使用
$\u GET
没有错,只是不要根据GET请求插入数据,如果显示GET使用的数据,请确保
htmlspecialchars()在将其输出给用户之前进行修改。

它永远不会更安全。@fyr,取决于使用情况。在某些情况下,POST确实更安全,因为它不会在浏览器的URL历史记录中留下不需要的数据。@binaryLV:true但历史记录不会阻止安全令牌过期,但假设我将应用程序分为多个步骤:每一步都有一个表单,其中包含用户填写的某些字段。每一步都在不同的网页上。如果用户想在POST中来回浏览,我会看到浏览器总是说“重新提交数据”?这是几乎每个网站都会出现的行为。我不知道亚马逊在结账时是怎么做的,因为在那里你可以随心所欲地前进和后退。也许他们使用AJAX或类似的东西将数据发送到服务器,而根本不使用POST,这存在安全性差异。尝试使用
action='get'
创建登录表单,而不使用所谓的
在post
模式后重定向(通常称为重定向)。我想对此进行上下投票。存在安全性差异:数据库写入只应作为
POST
的结果,而不是
GET
。但是我想投票支持
POST Redirect GET
。你知道客户端调用了重定向吗?你知道POST也有重放的弱点,比如GET?@TRiG,数据库写入也可能发生在GET请求中。数据库写入并不一定意味着编辑系统的某些主要对象。安全问题源于GET请求使用URL传递数据,而URL通常保存在浏览器的URL历史记录/缓存中。例如,通过GET请求传递用户的电子邮件和/或密码是毫无意义的(从安全角度来看)。@fyr,否,因为GET用于数据检索,POST用于数据处理。HTTP是一种标准协议,应按照规范中的说明使用。