通过 GET 将数据发送到网页的最安全方法?

Safest way to send data to webpage via GET?

我正在努力将几个值发送到 PHP 脚本,它使用以下内容;

echo '<td><a href="webpage1.php?var1=' . $var . '</a></td>';

这适用于不重要的数据。但是,这允许用户在 URL 和潜在的 view/obtain 安全数据中添加数据。

这是我的解决方法(不发布数据)

还有其他方法可以做到这一点,还是从表单发布数据是更好的方法?

如果数据需要对用户保密,则绝不能将其发送到浏览器。

将其保存在服务器上,并为浏览器提供一个 ID 以供参考。在此基础上应用您需要的任何 Authn/Authz。

另一种保护它的方法是你应该知道你期望 $var 是什么,所以如果用户在 url 中提供了不符合你的规则的东西,那么你可以拒绝它.这真的取决于 $var 到底有多敏感。

POST 并不比通过 HTTP 协议 的 GET 更安全。在安全方面,它们本质上是相同的。通过 SSL 加密 传递安全数据。

As far as security [goes], they are inherently the same. While it is true that POST doesn't expose information via the URL, it exposes just as much information as a GET in the actual network communication between the client and server. If you need to pass information that is sensitive, your first line of defense would be to pass it using Secure HTTP. Source

如果您通过网络传递 $var,并且您担心它可能会被修改以访问其他用户的数据,例如,那么您应该在服务器端执行检查,是否用户在会话中可以访问该 $var 变量。通常这是一个 id 变量,您与客户端的元素相关联,然后通过 AJAX 或正常的 Http 请求向上传递。

如果 var 实际上是指向服务器端某物的 id,则修改此变量会 return 404 Not Found。

想象一下:/resources/24 作为您的 URL。 24 是一个唯一的 ID。您的第一个要点是确保 24 允许当前登录的用户访问(您的数据模型通常会在这里使用 - 您的资源 table 将与用户有一对多的关联并且您将使用它作为身份验证的基础)。

实际上,POST 并不比 GET 更安全。如果您需要传递敏感信息,请使用 https:// 并加密敏感数据。否则,在应用程序的上下文中做正确的事情,并针对当前登录的用户服务器端进行授权。