**Problem** 1. **Static Signature Vulnerability**: - Email verification links used a static signature algorithm (same link for lifetime), allowing account hijacking if links were leaked. - *Worst-case scenario*: Compromised AppKey + leaked link → full-site account under danger. 2. **Overly Long Reset Window**: - Password reset links remained valid for 1 hour, enabling attackers to hijack accounts if intercepted. - *Worst-case scenario*: Compromised AppKey + leaked link → full-site account account take over. **Solution** - **Email Verification**: - Replaced static signatures with **HMAC-SHA256 + timestamp + nonce**. - Links are now **one-time-use** and expire immediately after verification. - **Password Reset**: - Reduced validity window from 1h → **5 minutes**. - Added rate limiting to prevent brute-force attacks. **Impact** - **Closed Communities**: Critical for real-name systems (e.g., gaming, enterprise). - **AppKey Leak Mitigation**: Even with leaked AppKey, intercepted links are now useless. The commit message is translated by Deepseek due to my poor English. |
||
|---|---|---|
| .devcontainer | ||
| .github | ||
| .husky | ||
| .vscode | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| plugins | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| tools | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .env.testing | ||
| .eslintignore | ||
| .eslintrc.yml | ||
| .gitignore | ||
| .gitpod.yml | ||
| .php-cs-fixer.dist.php | ||
| artisan | ||
| composer.json | ||
| composer.lock | ||
| crowdin.yml | ||
| Dockerfile | ||
| index.html | ||
| LICENSE | ||
| package.json | ||
| phpunit.xml | ||
| postcss.config.js | ||
| README-zh.md | ||
| README.md | ||
| server.php | ||
| tsconfig.build.json | ||
| tsconfig.dev.json | ||
| tsconfig.eslint.json | ||
| tsconfig.json | ||
| webpack.config.ts | ||
| yarn.lock | ||
- 简体中文
- English

Puzzled by losing your custom skins in Minecraft servers runing in offline mode? Now you can easily get them back with the help of Blessing Skin!
Blessing Skin is a web application where you can upload, manage and share your custom skins & capes! Unlike modifying a resource pack, everyone in the game will see the different skins of each other (of course they should register at the same website too).
Blessing Skin is an open-source project written in PHP, which means you can deploy it freely on your own web server!
Features
- A fully functional skin hosting service
- Multiple player names can be owned by one user on the website
- Share your skins and capes online with skin library!
- Easy-to-use
- Visual page for user/player/texture management
- Detailed option pages
- Many tweaks for a better UI/UX
- Security
- Support many secure password hash algorithms
- Email verification for registration
- Score system for preventing evil requests
- Incredibly extensible
- Plenty of plugins available
- Integration with Authme/Discuz (available as plugin)
- Support custom Yggdrasil API authentication (available as plugin)
Requirements
Blessing Skin has only a few system requirements. In most cases, these PHP extensions are already enabled.
- Web server with URL rewriting enabled (Nginx or Apache)
- PHP >= 8.1.0
- PHP Extensions
- OpenSSL >= 1.1.1 (TLS 1.3)
- PDO
- Mbstring
- Tokenizer
- GD
- XML
- Ctype
- JSON
- fileinfo
- zip
- Imagick
Quick Install
Please read Installation Guide.
Plugin System
Blessing Skin provides an elegant and powerful plugin system, and you can attach plenty of functions and customization to your site via installing plugins.
Supporting Blessing Skin
Welcome to sponsoring Blessing Skin if this software is useful for you!
Currently you can sponsor us via 爱发电.
Sponsors
|
gao_cai_sheng |
K_LazyCat |
伊南 |
家乐 |
黄金鞘翅的郡主 |
|
睡觉塞牙 |
Backers
|
飒爽师叔 |
皮皮帕 |
黄金鞘翅的郡主 |
♂sudo rm -rf /*[幼稚鬼] |
Build From Source
Please refer to Manual Build.
Internationalization
Blessing Skin supports multiple languages, while currently supporting English, Simplified Chinese and Spanish.
If you are willing to contribute your translation, welcome to join our Crowdin project.
Report Bugs
Read FAQ and double check if your situation doesn't suit any case mentioned there before reporting.
When reporting a problem, please attach your log file (located at storage/logs/laravel.log) and the information of your server where the error occured on. You should also read this guide before reporting a problem.
Related Links
Copyright & License
MIT License
Copyright (c) 2016-present The Blessing Skin Team
