我正在尝试向PHP脚本发送几个值,它正在使用以下内容;
echo '<td><a href="webpage1.php?var1=' . $var . '</a></td>';
这对于非常重要的数据来说很好。但是,这允许用户在URL中添加数据并可能查看/获取安全数据。
以下是关于如何解决问题的想法(不发布数据)
创建一个随机数或短语
将此值与GET和会话变量
在做任何重要的事情之前比较两个匹配(GET&amp; Session)
有没有其他方法可以做到这一点,或者从表单中发布数据是一种更好的方法吗?
答案 0 :(得分:2)
如果数据需要保持对用户的安全,则绝不能将其发送到浏览器。
将其保留在服务器上,并为浏览器提供ID以引用它。应用你需要的任何Authn / Authz。
答案 1 :(得分:0)
另一种保护它的方法是你应该知道你期望的$ var是什么,所以如果用户在url中提供了不符合你规则的东西,你可以拒绝它。这真的取决于$ var的敏感程度。
答案 2 :(得分:0)
POST 不比GET通过HTTP协议更安全 。在安全方面,它们本质上是相同的。传递安全数据加密和SSL。
就安全性而言,它们本质上是相同的。虽然POST不会通过URL公开信息,但它在客户端和服务器之间的实际网络通信中暴露的信息与GET一样多。如果您需要传递敏感信息,您的第一道防线是使用安全HTTP传递它。 Source
如果您通过网络传递$var
,并且您担心可以修改它以访问其他用户的数据,那么您应该执行检查,服务器端,是否会话中的用户可以访问该$var
变量。通常这是一个id
变量,它与客户端的元素关联,然后通过AJAX或普通的Http请求传递。
如果var实际上是指向服务器端的id,则此变量的修改将返回404 Not Found。
想象一下:/resources/24
作为您的网址。 24是唯一的id。您的第一个调用点是确保当前登录用户可以访问24(您的数据模型通常会在此处使用 - 您的资源表与用户有一对多的关联,您可以使用作为身份验证的基础。)
实际上,POST并不比GET更安全。如果需要传递敏感信息,请使用https://并加密敏感数据。否则,在应用程序的上下文中做正确的事情并对当前登录的用户服务器端进行授权。