如何让隐藏的场地安全?

时间:2014-02-28 07:17:38

标签: php html security hidden-field

我使用<input type="hidden" />传递一些值,所以我想隐藏字段是安全的我有一个用户个人资料页面我得到了这个成员的用户名

$userprofilename = $_GET['username'];

当某个团体向用户发布任何内容时,我会通过

获取个人资料的用户名
<input type="hidden" name="userprofile" value="<? echo $userprofilename; ?>" />

但是在Google Chrome中,任何正文都可以更改用户个人资料价值,我该如何保证其安全?

谢谢

4 个答案:

答案 0 :(得分:3)

然后,不是将其存储在公共表单中,而是将其存储在服务器会话

而不是

$userprofilename = $_GET['username']; 

待办事项

 session_start();
 $userprofilename = $_SESSION['username'];

当他们登录时,将他们的值添加到会话

 // on login
 session_start();
 $_SESSION['username']=$userprofilename;

答案 1 :(得分:1)

最好不要通过客户端,而是将其保留在服务器端。这就是sessions的用途:将值存储在服务器端会话中,然后您可以在表单提交时检索它。

但是,如果您不想使用会话,则至少可以通过使用MAChash_hmac对隐藏值进行签名来检测隐藏值是否被篡改。这是一个简单的例子:

function create_hmac($key, $uri, array $params)
    return hash_hmac('sha256', json_encode(array($uri, $params)), $key);
}
$secret = '7wzvtNgAVCTLPZ27P4L52yzc';

# on form creation
$hidden = array(
    'userprofile' => $_GET['username']
);
$hmac = create_hmac($secret, '/form/submit.php', $hidden);
echo '<input type="hidden" name="hidden" value="'.htmlspecialchars(json_encode($hidden)).'">';
echo '<input type="hidden" name="hmac" value="'.$hmac.'">';

# on form submission
$hidden = json_decode($_POST['hidden'], true);
if ($_POST['hmac'] !== create_hmac($secret, $_SERVER['REQUEST_URI'], $hidden)) {
    // invalid HMAC
} else {
    $_POST = $hidden + $_POST;
}

答案 2 :(得分:0)

您的表单页

创建一个像这样的会话变量

session_start();
$_SESSION['userprofilename'] = $userprofilename;

而不是隐藏的

<input type="hidden" name="userprofile" valu="<? echo $userprofilename; ?>" />

提交页面上的

您可以按如下方式检索

    session_start();
    $userprofilename = $_SESSION['userprofilename'];

  // use it as $userprofilename and then unset it
   unset($_SESSION['userprofilename']);

这是安全的,因为会话驻留在服务器上,客户端无法看到。通过查看html源代码或firebug等

答案 3 :(得分:0)

您可以尝试加密用户名,然后根据需要对其进行解密,如果您不想使用会话