69 lines
2.1 KiB
Markdown
69 lines
2.1 KiB
Markdown
# SafePaste
|
|
|
|
A minimal, encrypted pastebin built with PHP, MySQL, and Redis.
|
|
|
|
## Features
|
|
|
|
- **AES-256-CBC encryption** — all pastes are encrypted at rest using a master key
|
|
- **Optional password protection** — bcrypt-hashed passwords per paste
|
|
- **TTL expiry via Redis** — short-lived pastes live only in Redis; permanent pastes use MySQL
|
|
- **Clean dark UI** — responsive, accessible, no external dependencies
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
safe-paste/
|
|
├── app/
|
|
│ ├── config/config.php # Loads .env settings
|
|
│ ├── core/
|
|
│ │ ├── db.php # PDO connection
|
|
│ │ ├── redis.php # Redis singleton
|
|
│ │ └── security.php # Encrypt/decrypt helpers
|
|
│ ├── controllers/
|
|
│ │ ├── SaveController.php # POST handler: create paste
|
|
│ │ └── ViewController.php # GET/POST handler: view paste
|
|
│ └── models/Paste.php # Save/get paste (Redis + MySQL)
|
|
└── public/
|
|
├── index.php # Home page + save action
|
|
├── view.php # View paste page
|
|
├── error.php # Error page
|
|
├── .htaccess # URL routing
|
|
└── assets/
|
|
├── css/style.css
|
|
└── js/app.js
|
|
```
|
|
|
|
## Setup
|
|
|
|
1. Copy `.env.example` to `.env` and fill in your values
|
|
2. Create the MySQL database and table:
|
|
|
|
```sql
|
|
CREATE DATABASE paste CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
USE paste;
|
|
CREATE TABLE pastes (
|
|
id CHAR(32) PRIMARY KEY,
|
|
encrypted_text TEXT NOT NULL,
|
|
iv VARCHAR(64) NOT NULL,
|
|
expire_time INT DEFAULT NULL,
|
|
password_hash VARCHAR(255) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
```
|
|
|
|
3. Point your web server document root to `public/`
|
|
4. Ensure `mod_rewrite` is enabled (Apache) or configure your nginx equivalent
|
|
|
|
## .env
|
|
|
|
```ini
|
|
MASTER_KEY=your-random-secret-key
|
|
DB_HOST=localhost
|
|
DB_NAME=paste
|
|
DB_USER=root
|
|
DB_PASS=secret
|
|
REDIS_HOST=127.0.0.1
|
|
REDIS_PORT=6379
|
|
APP_URL=https://yourdomain.com
|
|
```
|