закодировать GET запрос чтоб не параметры не были видны

zagrenat

Гуру форума
Регистрация
26 Дек 2006
Сообщения
245
Реакции
68
Всем привет, вопрос
как закодировать GET запрос чтоб не параметры не были видны и ссылка уник была доступна

/index.php?d=18&m=12&y=1990&fi3x7&format=twig-html
задача простая, лишить людей возможности менять самим параметры в урле

в какую сторону хоть смотреть ?
 

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
292
Дополнительное поле ХЕШ сделайте, который будет как-то считаться из всех входящих параметров.
Дальше перед обработкой данных вычисляется хеш и сравнивается с вашими параметрами. Сошелся - запрос дальше пошел... Не сошелся - Error 404.

Как-то так:
/index.php?d=18&m=12&y=1990&fi3x7&format=twig-html&hash=asdklfjdhfkhasdfjlkajfl

Можно почитать Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:

duxabilii

Постоялец
Регистрация
3 Фев 2012
Сообщения
62
Реакции
37
Как вариант - использовать эти две функции
PHP:
<?php

$params = range(0, 10);

echo $params = json_encode($params);
echo PHP_EOL;
echo $encrypt = md5_encrypt($params, 'someStrongKeyForEncrypt');
echo PHP_EOL;
echo $decrypt = md5_decrypt($encrypt, 'someStrongKeyForEncrypt');

function md5_encrypt($plain_text, $password, $iv_len = 16) {
    $plain_text .= "\x13";
    $n = strlen($plain_text);
    if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16));
    $i = 0;
    $enc_text = get_rnd_iv($iv_len);
    $iv = substr($password ^ $enc_text, 0, 512);
    while ($i < $n) {
        $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
        $enc_text .= $block;
        $iv = substr($block . $iv, 0, 512) ^ $password;
        $i += 16;
    }
    return base64_encode($enc_text);
}

function md5_decrypt($enc_text, $password, $iv_len = 16) {
    $enc_text = base64_decode($enc_text);
    $n = strlen($enc_text);
    $i = $iv_len;
    $plain_text = '';
    $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
    while ($i < $n) {
        $block = substr($enc_text, $i, 16);
        $plain_text .= $block ^ pack('H*', md5($iv));
        $iv = substr($block . $iv, 0, 512) ^ $password;
        $i += 16;
    }
    return preg_replace('/\\x13\\x00*$/', '', $plain_text);
}
function get_rnd_iv($iv_len) {
    $iv = '';
    while ($iv_len-- > 0) {
        $max_rand = mt_rand(0, 255);
        $iv .= chr($max_rand & 0xff);
    }

    return $iv;
}

А результат работы md5_encrypt показывать в параметре УРЛ. При смене хотя бы одного символа на выходе каша
 

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.239
PHP:
<?php

$secret = 'D)*@Adoia2hdg0a29d7atoyljjfd#*&$^*^';

if (count($_GET))
{
    // Проверка
    $hash = $_GET['hash'];
    unset($_GET['hash']);
  
    ksort($_GET);
  
    if (md5(http_build_query($_GET)) === $hash)
    {
        echo 'success';
    }
    else
    {
        echo 'fail';
    }
}
else
{
    // Генерация
    $data = [
        'a' => 'b',
        'c' => 'd',
    ];
  
    ksort($data);
    $data['hash'] = md5(http_build_query($data));
  
    $get = http_build_query($data);
  
    header("Location: {$_SERVER['REQUEST_URI']}?{$get}");
}
 

autos

Гуру форума
Регистрация
14 Июл 2007
Сообщения
202
Реакции
57
Код:
//уникальная ссылка закодим с текущим временем
$get = "?d=18&m=12&y=1990&fi3x7&format=twig-html"."&time=".time();
$param = base64_encode($get);
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'/index.php?param='.$param
header("Location: $url");

//раскодим
$param = base64_decode(urldecode($_GET['param']));
parse_str($param, $output);
  foreach($output as $key => $value) {
     echo "key=$key / value=$value";
   }
 
Сверху