【问题标题】:How can I make hidden field is safe?如何使隐藏字段安全?
【发布时间】:2014-04-01 01:45:37
【问题描述】:

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

$userprofilename = $_GET['username'];

当有人向用户发布任何内容时,我会通过

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

但在 google chrome 中,任何主体都可以更改 userprofile 值,我怎样才能使其安全?

谢谢

【问题讨论】:

  • 您可以在表单页面上创建一个会话并在提交页面上检索它,然后在用户使用后销毁它
  • 不仅在 Chrome 中,几乎在任何浏览器中都可以更改代码。不建议这样做。改用会话。

标签: php html security hidden-field


【解决方案1】:

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

代替

$userprofilename = $_GET['username']; 

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

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

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

【讨论】:

  • 然后您可以使用任何可用的识别字段从数据库中获取它。您当前对我们可见的代码和问题没有为该案例提供足够的信息
  • 我使用rel="" 传递值来插入这样的页面 Html 代码

    post 1

    点赞

    帖子 2

    点赞

    post 3

    点赞 我怎样才能安全 rel
【解决方案2】:

您的表单页面

像这样创建一个会话变量

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

而不是这个隐藏

&lt;input type="hidden" name="userprofile" valu="&lt;? echo $userprofilename; ?&gt;" /&gt;

在您的提交页面上

您可以按如下方式检索它

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 问题与传递数据的方式有关。如果您可以改写您的答案,那将非常接近 OP 想要的。
    【解决方案4】:

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

    但是,如果您不想使用会话,您至少可以通过使用 MAC (如 hash_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;
    }
    

    【讨论】:

    • 嗨@Gumbo,隐藏javascript代码是不可能的,所以任何人都可以访问create_hmac函数和秘密。
    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多