Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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
Php 保护隐藏的输入文本框_Php_Forms_Security_Input - Fatal编程技术网

Php 保护隐藏的输入文本框

Php 保护隐藏的输入文本框,php,forms,security,input,Php,Forms,Security,Input,所以有时候,当我在一页到另一页之间传递变量时,如果我想将变量传递到表单操作中,我只需将其存储在元素中。这通常效果很好,但我意识到有些人可以很容易地进入HTML标记并简单地将隐藏的更改为键入文本,因此他们可以很容易地编辑正在传递的内容(如果说他们正在编辑自己的配置文件,而我已将他们的配置文件ID存储在隐藏的输入字段中,并且他们将其更改为其他人的配置文件,则这可能会很糟糕) 我想知道是否有解决此问题的最佳做法?我和一些同事谈过,他们说在提交表单时检查服务器,以确保他们没有传递错误的信息。这是最好的方

所以有时候,当我在一页到另一页之间传递变量时,如果我想将变量传递到表单操作中,我只需将其存储在
元素中。这通常效果很好,但我意识到有些人可以很容易地进入HTML标记并简单地将
隐藏的
更改为键入文本,因此他们可以很容易地编辑正在传递的内容(如果说他们正在编辑自己的配置文件,而我已将他们的配置文件ID存储在隐藏的输入字段中,并且他们将其更改为其他人的配置文件,则这可能会很糟糕)


我想知道是否有解决此问题的最佳做法?我和一些同事谈过,他们说在提交表单时检查服务器,以确保他们没有传递错误的信息。这是最好的方法还是有其他方法?

从安全角度看,您不能信任任何通知正如您正确指出的,这意味着您必须在调用此类页面时将其存储在服务器端

通常的做法是在cookie中为每个客户端提供一个会话标识符,在服务器端,您可以将所有敏感信息关联到该会话标识符。会话标识符应该是随机的,因为如果它是连续的,您可以更改其值并随机劫持其他人的会话

有多种方法可以存储与会话标识符有关的信息。PHP中最灵活、可能也是最容易实现的方法是使用内置的会话支持。PHP可以为您处理会话标识符,并允许您在
$\u session
超全局中存储任何可序列化的对象。这是一个不错的解决方案,由于会话数据通常存储在服务器的临时文件夹中,如果它是共享服务器,则该服务器上的其他网站理论上可能会窥探、查看甚至操纵会话数据。当然,如果您所做的影响很小,那么不太可能有人会租用相同的服务器不过,例如,OAuth提供商建议您不要将OAuth令牌存储在公共环境中的
$\u会话
存储中

<?php
session_start();
// place anything you need to save between pages in $_SESSION
$_SESSION["foo"] = array("bar", "baz");
// until you unset $_SESSION["foo"], it will be available in every page that called
// session_start().
?>

当用户注销时,最好调用
session\u destroy
,以确保其会话数据的存在时间不会超过需要的时间


另一方面,您还可以将信息存储在数据库(如MySQL)中。这在安全方面更为明智,因为您应该远离任何没有不同数据库用户或每个服务器用户都没有不同数据库的主机,并且您可以确保没有其他人能够更改(甚至只是查看)会话信息。但是,这并没有那么灵活,因为您需要一个表结构来存储任何您想要存储的内容。

从安全角度来看,您不能信任来自客户端的任何信息,正如您正确指出的那样。这意味着您必须在调用此类页面时将其存储在服务器端

通常的做法是在cookie中为每个客户端提供一个会话标识符,在服务器端,您可以将所有敏感信息关联到该会话标识符。会话标识符应该是随机的,因为如果它是连续的,您可以更改其值并随机劫持其他人的会话

有多种方法可以存储与会话标识符有关的信息。PHP中最灵活、可能也是最容易实现的方法是使用内置的会话支持。PHP可以为您处理会话标识符,并允许您在
$\u session
超全局中存储任何可序列化的对象。这是一个不错的解决方案,由于会话数据通常存储在服务器的临时文件夹中,如果它是共享服务器,则该服务器上的其他网站理论上可能会窥探、查看甚至操纵会话数据。当然,如果您所做的影响很小,那么不太可能有人会租用相同的服务器不过,例如,OAuth提供商建议您不要将OAuth令牌存储在公共环境中的
$\u会话
存储中

<?php
session_start();
// place anything you need to save between pages in $_SESSION
$_SESSION["foo"] = array("bar", "baz");
// until you unset $_SESSION["foo"], it will be available in every page that called
// session_start().
?>

当用户注销时,最好调用
session\u destroy
,以确保其会话数据的存在时间不会超过需要的时间


另一方面,您还可以将信息存储在数据库(如MySQL)中。这在安全方面更为明智,因为您应该远离任何没有不同数据库用户或每个服务器用户都没有不同数据库的主机,并且您可以确保没有其他人能够更改(甚至只是查看)会话信息。但是,这并没有那么灵活,因为您需要一个表结构来存储任何您想要存储的内容。

从安全角度来看,您不能信任来自客户端的任何信息,正如您正确指出的那样。这意味着您必须在调用此类页面时将其存储在服务器端

通常的做法是在cookie中为每个客户端提供一个会话标识符,在服务器端,您可以将所有敏感信息关联到该会话标识符。会话标识符应该是随机的,因为如果它是连续的,您可以更改其值并随机劫持其他人的会话

有多种方法可以存储与会话标识符有关的信息。PHP中最灵活、可能也是最容易实现的方法是使用内置的会话支持。PHP可以为您处理会话标识符,并允许您在
$\u session
超全局中存储任何可序列化的对象。这是一个不错的解决方案,由于会话数据通常存储在服务器的临时文件夹中,如果是共享服务器,则该服务器上的其他网站理论上可能会窥探、查看甚至操纵会话数据