不要在历史记录,任何标题或元标记中保存URL?

时间:2010-07-05 10:22:05

标签: security zend-framework browser-history meta-tags http-headers

是否可以使用任何HTTP标头或元标记来避免将URL添加到浏览器历史记录中?

例如,我不想要

http://domain.td/show/super-secret-unique-token-that-is-private
当我开始输入“domain.t”时,

显示在浏览器URL栏中。

目前我在网站上有一个(POST)搜索表单来加载令牌,但它们没有出现。但是后来我想通过链接加载令牌,比如让我们说一张专辑。

2 个答案:

答案 0 :(得分:2)

我认为你不能。

您可以将令牌保存为cookie,或将其用作GET参数,但每15分钟左右使其过期(并在每次加载页面时重新生成一个新的)。还要检查相同的用户代理,如果你想沿着IP路走IP地址(但是它可以给出误报,我不推荐它)。

答案 1 :(得分:0)

决定使用我在浏览器会话中保存的地图。通过这种方式,我可以将令牌密钥传递给URL,然后将变量返回。

我写了一个Zend_Session_Namespace的小扩展类,并添加了'add'和'get'函数。

<?php

class My_Session_Tokens extends Zend_Session_Namespace {

    protected $_namespace = "Tokens";

    public function __construct($namespace = 'Tokens', $singleInstance = false)
    {
        parent::__construct($namespace, $singleInstance);
    }

    public function add($token) {
        if($tokenKey = $this->hasToken($token)) {
            return $tokenKey;
        }

        do { $tokenKey = uniqid(); } while(isset($this->$tokenKey));

        $this->$tokenKey = $token;
        return $tokenKey;
    }

    public function get($tokenKey) {
        if(isset($tokenKey)) {
            return $this->$tokenKey;
        }
        return null;
    }

    public function hasToken($token) {
        foreach($this as $key => $val) {
            if($val === $token) return $key;
        }
        return false;
    }
}