Как получить значение из URL с PHP? - PullRequest
0 голосов
/ 19 июня 2020

Я делаю страницу загрузки, защищая ссылку для загрузки программного обеспечения от получения горячих ссылок. Я хочу, чтобы срок действия URL-адреса истек, если он прошел указанный срок.

Для кода, который я использую, требуется значение из URL-адреса. Я поигрался с этим кодом, но, к сожалению, мои навыки программирования не так хороши, поэтому я не мог понять, как его изменить. Я был бы очень признателен за любую помощь, которую я могу получить в этом.

localhost / example / index. php:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = '/download/tempfile.zip';
$timestamp = time() + 3600; // one hour valid
$hash = md5($salt . $ip . $timestamp . $path); // order isn't important at all... just do the same when verifying
$url = "http://localhost/example{$path}?s={$hash}&t={$timestamp}"; // use this as DL url
?>

<form action="download.php" method="get">
        <input name="bode" type="hidden" value="<?php echo $url; ?>">
        <input type="submit">
</form>

localhost / example / скачать. php:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = $_SERVER['REQUEST_URI'];
$hashGiven = $_GET['s'];
$timestamp = $_GET['t'];
$hash = md5($salt . $ip . $timestamp . $path);
if($hashGiven == $hash && $timestamp <= time()) {
    // serve file
} else {
    die('link expired or invalid');
} 
?>

localhost / example / download. php? bode = http% 3A% 2F% 2Flocalhost% 2Fexample% 2Fdownload% 2Ftempfile.zip% 3Fs % 3D86bc6c7959db1b3b2876a5d447c2528a% 26t% 3D1592559029

страница сгенерировала ошибку.

Notice: Undefined index: s in C:\xampp\htdocs\example\download.php on line 7

Notice: Undefined index: t in C:\xampp\htdocs\example\download.php on line 8
link expired or invalid

Какое решение?

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Действие формы «загрузить. php» должно иметь параметры URL «s» и «t», поскольку именно это вы пытаетесь получить в файле загрузки.

Когда форма отправляется как есть, она отправляет входное значение URL-адреса, но это не то поле, которое вы проверяете с полями $ _GET при загрузке. php.

0 голосов
/ 19 июня 2020

Просто проверьте, имеет ли URL-адрес ожидаемые параметры получения с помощью функции isset.

$hashGiven = isset($_GET['s']) ? $_GET['s'] : '';
$timestamp = isset($_GET['t']) ? $_GET['t'] : '';

Не доверяйте параметрам из URL-адреса. Всегда проверяйте и проверяйте эти параметры.

Кстати ... ваш URL выглядит закодированным. Таким образом, отдельные параметры не будут обрабатываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...