从 PHP GET 方法中的查询参数中解密基本身份验证令牌
Decrypt Basic authentication token from query param in PHP GET method
我想解密使用基本身份验证加密的用户名和密码。
在我的客户端应用程序中,我有一个文件列表。如果用户想要下载,他们将单击指向带有参数 id
(即 fileId
)和 token
的 PHP 文件的锚点 link。
我有一个像
这样的客户端锚标签
<a href="http://localhost:8080/management/download.php?id=1&token=YmFsYTphYWFhYWFhYWFh">
download
</a>
令牌是使用以下 javascript 代码创建的
const token = window.btoa(username + ':' + password)
文件:download.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']
获取用户名和密码,但未能获取信息。
请帮助我如何从令牌中解密用户名和密码。
在PHP中使用base64_decode()得到用:
分隔的用户名和密码。
<?php
$decoded = base64_decode($_GET['token']);
list($username,$password) = explode(":",$decoded);
echo $username," ",$password;
此外,这似乎不够安全,无法像 GET 参数那样发送密码(不确定此处描述的密码)。最好改为发送 header 之类的 Authorization: Basic YmFsYTphYWFhYWFhYWFh
,它实际上是一些客户端 ID 和客户端密码 base-64 编码。
我想解密使用基本身份验证加密的用户名和密码。
在我的客户端应用程序中,我有一个文件列表。如果用户想要下载,他们将单击指向带有参数 id
(即 fileId
)和 token
的 PHP 文件的锚点 link。
我有一个像
这样的客户端锚标签<a href="http://localhost:8080/management/download.php?id=1&token=YmFsYTphYWFhYWFhYWFh">
download
</a>
令牌是使用以下 javascript 代码创建的
const token = window.btoa(username + ':' + password)
文件:download.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']
获取用户名和密码,但未能获取信息。
请帮助我如何从令牌中解密用户名和密码。
在PHP中使用base64_decode()得到用:
分隔的用户名和密码。
<?php
$decoded = base64_decode($_GET['token']);
list($username,$password) = explode(":",$decoded);
echo $username," ",$password;
此外,这似乎不够安全,无法像 GET 参数那样发送密码(不确定此处描述的密码)。最好改为发送 header 之类的 Authorization: Basic YmFsYTphYWFhYWFhYWFh
,它实际上是一些客户端 ID 和客户端密码 base-64 编码。