修复漏洞
parent
8da26ca463
commit
3434282bbb
|
@ -8,7 +8,6 @@ require_once APP_ROOT . '/config/config.guest.php';
|
|||
// 验证登录
|
||||
header("Content-Type: text/html;charset=utf-8");
|
||||
|
||||
|
||||
// 退出
|
||||
if (isset($_GET['login'])) {
|
||||
if ($_GET['login'] = 'logout') {
|
||||
|
|
|
@ -54,7 +54,23 @@ $handle = new Upload($_FILES['image'], 'zh_CN');
|
|||
|
||||
if ($handle->uploaded) {
|
||||
// 允许上传的mime类型
|
||||
$handle->allowed = array('image/*');
|
||||
if ($config['allowed'] === 1) {
|
||||
$handle->allowed = array('image/*');
|
||||
}
|
||||
// svg格式过滤
|
||||
if ($handle->file_src_name_ext === 'svg') {
|
||||
$svg = file_get_contents($handle->file_src_pathname);
|
||||
if (preg_match('/<script[\s\S]*?<\/script>/', $svg)) {
|
||||
exit(json_encode(
|
||||
array(
|
||||
"result" => "failed",
|
||||
"code" => 205,
|
||||
"message" => "请勿上传非法文件",
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
// 文件命名
|
||||
$handle->file_new_name_body = imgName($handle->file_src_name_body);
|
||||
// 添加Token ID
|
||||
|
|
|
@ -119,7 +119,7 @@ function _login($user = null, $password = null)
|
|||
global $guestConfig;
|
||||
|
||||
// cookie验证
|
||||
if ($user == null and $password == null) {
|
||||
if ($user === null and $password === null) {
|
||||
// 无cookie
|
||||
if (empty($_COOKIE['auth'])) {
|
||||
return json_encode(array('code' => 400, 'level' => 0, 'messege' => '请登录'));
|
||||
|
@ -132,9 +132,9 @@ function _login($user = null, $password = null)
|
|||
// 判断账号是否存在
|
||||
if ($browser_cookie[0] !== $config['user'] && !array_key_exists($browser_cookie[0], $guestConfig)) return json_encode(array('code' => 400, 'level' => 0, 'messege' => '账号不存在'));
|
||||
// 判断是否管理员
|
||||
if ($browser_cookie[0] == $config['user'] && $browser_cookie[1] == $config['password']) return json_encode(array('code' => 200, 'level' => 1, 'messege' => '尊敬的管理员'));
|
||||
if ($browser_cookie[0] === $config['user'] && $browser_cookie[1] === $config['password']) return json_encode(array('code' => 200, 'level' => 1, 'messege' => '尊敬的管理员'));
|
||||
// 判断是否上传者
|
||||
if (array_key_exists($browser_cookie[0], $guestConfig) && $browser_cookie[1] == $guestConfig[$browser_cookie[0]]['password']) {
|
||||
if (array_key_exists($browser_cookie[0], $guestConfig) && $browser_cookie[1] === $guestConfig[$browser_cookie[0]]['password']) {
|
||||
// 判断上车者是否过期
|
||||
if ($guestConfig[$browser_cookie[0]]['expired'] < time()) {
|
||||
// 上传者账户密码正确,但是账户过期
|
||||
|
@ -143,7 +143,7 @@ function _login($user = null, $password = null)
|
|||
return json_encode(array('code' => 200, 'level' => 2, 'messege' => $browser_cookie[0] . '用户已登录'));
|
||||
}
|
||||
// 账号存在,密码错误
|
||||
if ($browser_cookie[0] == $config['user'] || array_key_exists($browser_cookie[0], $guestConfig)) return json_encode(array('code' => 400, 'level' => 0, 'messege' => '密码错误'));
|
||||
if ($browser_cookie[0] === $config['user'] || array_key_exists($browser_cookie[0], $guestConfig)) return json_encode(array('code' => 400, 'level' => 0, 'messege' => '密码错误'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,25 +151,25 @@ function _login($user = null, $password = null)
|
|||
$user = strip_tags($user);
|
||||
$password = strip_tags($password);
|
||||
// 是否管理员
|
||||
if ($user == $config['user'] && $password == $config['password']) {
|
||||
if ($user === $config['user'] && $password === $config['password']) {
|
||||
// 将账号密码序列化后存储
|
||||
$browser_cookie = serialize(array($user, $password));
|
||||
setcookie('auth', $browser_cookie, time() + 3600 * 24 * 14, '/');
|
||||
return json_encode(array('code' => 200, 'level' => 1, 'messege' => '管理员登录成功'));
|
||||
}
|
||||
// 是否上传者
|
||||
if (array_key_exists($user, $guestConfig) && $password == $guestConfig[$user]['password']) {
|
||||
if (array_key_exists($user, $guestConfig) && $password === $guestConfig[$user]['password']) {
|
||||
// 上传者账号过期
|
||||
if ($guestConfig[$user]['expired'] < time()) return json_encode(array('code' => 400, 'level' => 0, 'messege' => $user . '账号已过期'));
|
||||
// 未过期设置cookie
|
||||
$browser_cookie = serialize(array($user, $password));
|
||||
$browser_cookie === serialize(array($user, $password));
|
||||
setcookie('auth', $browser_cookie, time() + 3600 * 24 * 14, '/');
|
||||
return json_encode(array('code' => 200, 'level' => 2, 'messege' => $user . '用户登录成功'));
|
||||
}
|
||||
// 检查账号是否存在
|
||||
if (array_key_exists($user, $guestConfig) || $user == $config['user']) {
|
||||
if (array_key_exists($user, $guestConfig) || $user === $config['user']) {
|
||||
// 账号存在,密码错误
|
||||
if ($user == $config['user'] || array_key_exists($user, $guestConfig)) return json_encode(array('code' => 400, 'level' => 0, 'messege' => '密码错误'));
|
||||
if ($user === $config['user'] || array_key_exists($user, $guestConfig)) return json_encode(array('code' => 400, 'level' => 0, 'messege' => '密码错误'));
|
||||
} else {
|
||||
return json_encode(array('code' => 400, 'level' => 0, 'messege' => '账号不存在'));
|
||||
}
|
||||
|
@ -207,12 +207,12 @@ function checkLogin()
|
|||
}
|
||||
|
||||
// 管理员登陆
|
||||
if ($getCOK[0] == $config['user'] && $getCOK[1] == $config['password']) {
|
||||
if ($getCOK[0] === $config['user'] && $getCOK[1] === $config['password']) {
|
||||
return 204;
|
||||
}
|
||||
|
||||
// 上传者账号登陆
|
||||
if ($getCOK[1] == $guestConfig[$getCOK[0]]['password']) {
|
||||
if ($getCOK[1] === $guestConfig[$getCOK[0]]['password']) {
|
||||
if ($guestConfig[$getCOK[0]]['expired'] < time()) {
|
||||
// 上传者账号过期
|
||||
return 206;
|
||||
|
@ -232,7 +232,7 @@ function mustLogin()
|
|||
$status = _login();
|
||||
$status = json_decode($status, true);
|
||||
|
||||
if ($status['code'] == 200) {
|
||||
if ($status['code'] === 200) {
|
||||
echo '
|
||||
<script>
|
||||
new $.zui.Messager("' . $status["messege"] . '", {
|
||||
|
@ -243,7 +243,7 @@ function mustLogin()
|
|||
</script>';
|
||||
}
|
||||
|
||||
if ($status['code'] == 400) {
|
||||
if ($status['code'] === 400) {
|
||||
echo '
|
||||
<script>
|
||||
new $.zui.Messager("' . $status["messege"] . '", {
|
||||
|
@ -625,8 +625,8 @@ function getDel($url, $type)
|
|||
$url = APP_ROOT . $url;
|
||||
}
|
||||
|
||||
// 文件是否存在
|
||||
if (is_file($url)) {
|
||||
// 文件是否存在 限制删除目录
|
||||
if (is_file($url) && strrpos($url, $config['path'])) {
|
||||
// 执行删除
|
||||
if (@unlink($url)) {
|
||||
echo '
|
||||
|
@ -673,11 +673,11 @@ function is_who_login($user)
|
|||
// 将状态转码
|
||||
$status = json_decode(_login(), true);
|
||||
// 查询是否登录
|
||||
if ($user == 'status') if ($status['level'] > 0) return true;
|
||||
if ($user === 'status') if ($status['level'] > 0) return true;
|
||||
// 是否管理员登录
|
||||
if ($user == 'admin') if ($status['level'] == 1) return true;
|
||||
if ($user === 'admin') if ($status['level'] == 1) return true;
|
||||
// 是否上传者登录
|
||||
if ($user == 'guest') if ($status['level'] == 2) return true;
|
||||
if ($user === 'guest') if ($status['level'] == 2) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -59,6 +59,19 @@ if ($handle->uploaded) {
|
|||
if ($config['allowed'] === 1) {
|
||||
$handle->allowed = array('image/*');
|
||||
}
|
||||
// svg格式过滤
|
||||
if ($handle->file_src_name_ext === 'svg') {
|
||||
$svg = file_get_contents($handle->file_src_pathname);
|
||||
if (preg_match('/<script[\s\S]*?<\/script>/', $svg)) {
|
||||
exit(json_encode(
|
||||
array(
|
||||
"result" => "failed",
|
||||
"code" => 205,
|
||||
"message" => "请勿上传非法文件",
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
// 文件命名
|
||||
$handle->file_new_name_body = imgName($handle->file_src_name_body);
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
* 2023-02-25 v2.7.6
|
||||
* 2023-03-04 v2.7.6 dev
|
||||
- 增加删除文件时限定目录
|
||||
- 增强对SVG格式过滤以避免产生xss 致谢:[xulei1112](https://github.com/xulei1112)
|
||||
- 修复弱类型验证导致的异常登录 致谢:[xulei1112](https://github.com/xulei1112)
|
||||
- 更换加密删除链接算法 - 链接更短
|
||||
- 完全兼容 PHP5.6-8.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
> 推荐环境:Nginx + PHP≥7.0 + linux
|
||||
> 推荐环境:Nginx + PHP≥7.0 + Linux
|
||||
|
||||
#### windows:
|
||||
- 下载简单图床 [最新版](https://github.com/icret/EasyImages2.0/archive/refs/heads/master.zip)|[稳定版](https://github.com/icret/EasyImages2.0/releases) 上传至web根目录
|
||||
|
@ -14,6 +14,5 @@ chown -R www:www /安装目录
|
|||
```
|
||||
|
||||
#### BT宝塔面板
|
||||
- 1. 软件商店 $\Rightarrow$ 一键部署 $\Rightarrow$ 搜索`简单图床`一键部署稳定版
|
||||
- 1. 软件商店 → 一键部署 → 搜索`简单图床`一键部署稳定版
|
||||
- 2. 使用上边的`Linux`方法搭建
|
||||
- 安装环境: Ngixn(推荐) / Apache + PHP(推荐≥7.0)
|
||||
|
|
Loading…
Reference in New Issue