从 PHP GET 方法中的查询参数解密基本身份验证令牌

我想解密使用基本身份验证加密的用户名和密码。


在我的客户端应用程序中,我有一个文件列表。如果用户想要下载,他们将单击指向带有参数id(即fileId)和.php 的 PHP 文件的锚链接token。


我有一个客户端锚标签,比如


<a href="http://localhost:8080/management/download.php?id=1&token=YmFsYTphYWFhYWFhYWFh">

    download

</a>

令牌是使用以下 javascript 代码创建的


const token = window.btoa(username + ':' + password)

文件:下载.php


$fileId = $_GET['id'];

$token = $_GET['token'];


$filePath = getFileById($fileId);


if (file_exists($filePath)) {

    header('Content-Description: File Transfer');

    header('Content-Type: application/octet-stream');

    header('Content-Disposition: attachment; filename="'.basename($filePath).'"');

    header('Expires: 0');

    header('Cache-Control: must-revalidate');

    header('Pragma: public');

    header('Content-Length: ' . filesize($filePath));

    readfile($filePath);

    exit;

}

我试图从默认值中获取用户名和密码,$_SERVER['PHP_AUTH_USER']但无法获取信息。


请帮助我如何从令牌中解密用户名和密码。


温温酱
浏览 181回答 1
1回答

aluckdog

在 PHP 中使用base64_decode()获取用户名和密码以:.<?php$decoded = base64_decode($_GET['token']);list($username,$password) = explode(":",$decoded);echo $username," ",$password;演示: https : //3v4l.org/KKIlR此外,这似乎不够安全,无法像 GET 参数中那样发送密码(不确定此处描述的是什么密码)。最好改为发送一个标头,例如Authorization: Basic YmFsYTphYWFhYWFhYWFh它实际上是一些客户端 ID 和客户端秘密 base-64 编码的位置。
打开App,查看更多内容
随时随地看视频慕课网APP