Не сохранять URL в истории, какой-либо заголовок или мета-тег?

#security #zend-framework #browser-history #meta-tags #http-headers

#Безопасность #zend-framework #браузер-история #мета-теги #http-заголовки

Вопрос:

Существуют ли какие-либо HTTP-заголовки или мета-теги, которые можно использовать, чтобы избежать попадания URL-адреса в историю браузера?

Например, я не хочу

 http://domain.td/show/super-secret-unique-token-that-is-private
  

чтобы отображаться в строке URL браузера, когда я начинаю вводить «domain.t».

В настоящее время у меня есть форма поиска (POST) на веб-сайте для загрузки токенов, и они не отображаются. Но позже я хочу загрузить токены по ссылкам, скажем, из альбома.

Ответ №1:

Я не думаю, что ты сможешь.

Вы можете сохранить токен как файл cookie или использовать его как параметр GET, но срок его действия истекает примерно каждые 15 минут (и создавать новый при каждой загрузке страницы). Также проверьте наличие того же пользовательского агента, и если вы хотите пойти по пути IP, IP-адрес (однако это может давать ложные срабатывания, я бы не рекомендовал это).

Комментарии:

1. Да, я, вероятно, мог бы просто сохранить «карту ссылок» в сеансе. Сохраняйте уникальные токены в массиве с уникальными сгенерированными ключами. Затем просто передайте уникальный сгенерированный ключ через URL. Таким образом, URL-адрес был бы поддельным, если бы не тот же сеанс.

2. Подумав о моем собственном решении, я думаю, что это правильный путь. Это также решило бы некоторые другие проблемы, которые у меня есть в настоящее время 🙂 Спасибо, что направили мои мысли в нужное русло!

Ответ №2:

Решил использовать карту, которую я сохраняю в сеансе браузера. Таким образом, я могу передать токен-ключ через 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;
    }
}