Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d180420a46 | |||
| 52ff3fccaf | |||
| d64f9bdd8f | |||
|
|
a3139c91b9 | ||
| bad8552aac | |||
| 978349e9cf | |||
| e44a5fa974 | |||
| 760b58ebb8 | |||
| a17deadf11 |
170
README.md
Normal file
170
README.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# Web Authorization (PHP + MySQL)
|
||||
|
||||
Минимальная система авторизации для статических HTML‑сайтов с проверкой доступа по алиасам сайтов.
|
||||
|
||||
## Возможности
|
||||
- Авторизация по логину/паролю (PHP + MySQL)
|
||||
- Сессии с безопасными cookie
|
||||
- Раздельный доступ по сайтам через алиасы
|
||||
- Готовый UI для страницы входа
|
||||
- Скрипт массового импорта пользователей
|
||||
|
||||
---
|
||||
|
||||
## Структура проекта
|
||||
```
|
||||
/
|
||||
api/
|
||||
login.php
|
||||
check_auth.php
|
||||
logout.php*
|
||||
config/
|
||||
db.php
|
||||
session.php
|
||||
css/
|
||||
auth.css*
|
||||
js/
|
||||
auth.js
|
||||
login.html
|
||||
index.html
|
||||
import_users.php*
|
||||
```
|
||||
> - auth.css - может быть полностью размещен в login.htm<br>
|
||||
> - import_users.php - для работы не требуется, только для массового добавления пользователей<br>
|
||||
> - logout.php - в текущей реализации не используется
|
||||
|
||||
---
|
||||
|
||||
## Требования
|
||||
- PHP 7.4+ (с модулями `pdo_mysql`)
|
||||
- MySQL/MariaDB
|
||||
- Веб‑сервер (Apache/Nginx)
|
||||
|
||||
---
|
||||
|
||||
## Шаг 1. Создание таблицы пользователей
|
||||
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL UNIQUE,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
ok5 TINYINT(1) NOT NULL DEFAULT 0,
|
||||
o7 TINYINT(1) NOT NULL DEFAULT 0,
|
||||
o10m TINYINT(1) NOT NULL DEFAULT 0,
|
||||
o10a TINYINT(1) NOT NULL DEFAULT 0,
|
||||
webp TINYINT(1) NOT NULL DEFAULT 0
|
||||
);
|
||||
```
|
||||
|
||||
> Если таблица уже есть, добавьте колонки алиасов:
|
||||
```sql
|
||||
ALTER TABLE users
|
||||
ADD COLUMN ok5 TINYINT(1) NOT NULL DEFAULT 0,
|
||||
ADD COLUMN o7 TINYINT(1) NOT NULL DEFAULT 0,
|
||||
ADD COLUMN o10m TINYINT(1) NOT NULL DEFAULT 0,
|
||||
ADD COLUMN o10a TINYINT(1) NOT NULL DEFAULT 0,
|
||||
ADD COLUMN webp TINYINT(1) NOT NULL DEFAULT 0;
|
||||
```
|
||||
> `ok5 o7 o10m o10a webp` - используйте в качестве алиасов для сайтов, могут быть любыми, потребуется править код в `login.php`
|
||||
```php
|
||||
$allowedAliases = ['ok5', 'o7', 'o10m', 'o10a', 'webp'];
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 2. Настройка подключения к БД
|
||||
Отредактируйте `config/db.php`:
|
||||
```php
|
||||
$host = 'localhost';
|
||||
$dbname = 'users';
|
||||
$username = 'root';
|
||||
$password = '...';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Шаг 3. Подключение к сайту
|
||||
|
||||
### 1) Добавьте папку `api/`, `js/`, `css/` в корень сайта
|
||||
Должны быть доступны:
|
||||
- `/api/login.php`
|
||||
- `/api/check_auth.php`
|
||||
- `/api/logout.php`
|
||||
- `/js/auth.js`
|
||||
- `/css/auth.css`
|
||||
|
||||
### 2) Страница логина
|
||||
В `login.html` добавьте:
|
||||
```html
|
||||
<meta name="site-alias" content="ok5">
|
||||
<link rel="stylesheet" href="css/auth.css">
|
||||
<script src="js/auth.js"></script>
|
||||
```
|
||||
|
||||
`site-alias` — это идентификатор сайта для доступа.
|
||||
|
||||
### 3) Защищённые страницы
|
||||
На любой странице, которую нужно защитить:
|
||||
```html
|
||||
<script>
|
||||
async function checkAuth() {
|
||||
const response = await fetch('/api/check_auth.php', { credentials: 'same-origin' });
|
||||
const result = await response.json();
|
||||
if (!result.isLoggedIn) window.location.href = '/login.html';
|
||||
}
|
||||
checkAuth();
|
||||
</script>
|
||||
```
|
||||
|
||||
> Рекомендуется использовать **абсолютные пути** (`/api/...`), если страницы лежат в разных каталогах.
|
||||
> Незабывайте проверять права на файлы и каталоги добовляемых файлов, если речь об `Linux` подобных ОС
|
||||
---
|
||||
|
||||
## Шаг 4. Настройка доступа по алиасам
|
||||
Доступ контролируется через поля в `users`:
|
||||
- `ok5`, `o7`, `o10m`, `o10a`, `webp`
|
||||
> 1 - allowed ))
|
||||
|
||||
Пример выдачи доступа:
|
||||
```sql
|
||||
UPDATE users SET ok5=1, o7=1 WHERE username='ivan';
|
||||
```
|
||||
|
||||
Если доступа нет → при логине будет ошибка `Нет доступа к сайту`.
|
||||
|
||||
> Так же доступ можно выдать в `phpmyadmin` подключившись к БД
|
||||
---
|
||||
|
||||
## Шаг 5. Массовая загрузка пользователей
|
||||
1) Создайте файл `users.txt` в корне проекта
|
||||
Формат: **по одному логину в строке**
|
||||
2) Запустите:
|
||||
```
|
||||
php import_users.php
|
||||
```
|
||||
3) Результат: `users_with_passwords.txt` (формат `login:password`)
|
||||
|
||||
---
|
||||
|
||||
## Как применить к любому сайту
|
||||
1) Скопируйте папки `api/`, `js/`, `css/` в корень сайта.
|
||||
2) Скопируйте `login.html` и добавьте `<meta name="site-alias" content="...">`.
|
||||
3) На защищённых страницах используйте проверку `check_auth.php`.
|
||||
4) Добавьте пользователей в таблицу `users` и выдайте доступ по нужному алиасу.
|
||||
|
||||
---
|
||||
|
||||
## Частые проблемы
|
||||
**Ошибка “Метод не поддерживается”**
|
||||
→ Запрос идёт GET‑ом. Проверьте, что `auth.js` подключён и форма имеет `id="loginForm"`.
|
||||
|
||||
**Ошибка “Не указан сайт”**
|
||||
→ Нет `site-alias` в `login.html`.
|
||||
|
||||
**Ошибка “Could not find driver”**
|
||||
→ В PHP не включён `pdo_mysql`.
|
||||
|
||||
---
|
||||
|
||||
Если нужно расширить список алиасов — добавьте колонку в БД и внесите её в список в `api/login.php`.
|
||||
38
users.txt
38
users.txt
@@ -1,6 +1,32 @@
|
||||
ane.marin
|
||||
r.abramov
|
||||
a.agafonov
|
||||
m.arkhipov
|
||||
d.zaitsev
|
||||
vlv.kuneevskii
|
||||
ane.marin
|
||||
r.abramov
|
||||
a.agafonov
|
||||
m.arkhipov
|
||||
d.zaitsev
|
||||
vlv.kuneevskii
|
||||
t.zhiganova
|
||||
v.pikas
|
||||
v.voitenok
|
||||
rum.bakirov
|
||||
k.bezrukov
|
||||
va.vinogradov
|
||||
a.grishina
|
||||
s.gusev
|
||||
s.danilova
|
||||
t.zhiganova
|
||||
s.zarubin
|
||||
a.izilianov
|
||||
vlv.kamenev
|
||||
a.kozin
|
||||
iu.kosolapov
|
||||
i.kurilov
|
||||
v.mineev
|
||||
e.mineeva
|
||||
K.Pletnev
|
||||
a.ponomarev
|
||||
edg.sviderskii
|
||||
a.stepanova
|
||||
z.tashbaeva
|
||||
iu.utkina
|
||||
n.kharitonova
|
||||
a.shvarok
|
||||
@@ -4,3 +4,31 @@ a.agafonov:XsmiAE
|
||||
m.arkhipov:4nWj6J
|
||||
d.zaitsev:ZgvacV
|
||||
vlv.kuneevskii:RoAPfv
|
||||
t.zhiganova:iMB1PK
|
||||
v.pikas:lqP1Hq
|
||||
v.voitenok:GpO32I
|
||||
rum.bakirov:h1q7tu
|
||||
k.bezrukov:iMGUV7
|
||||
va.vinogradov:oeK3bO
|
||||
a.grishina:iUApfC
|
||||
s.gusev:tzKikl
|
||||
s.danilova:oB0Fva
|
||||
t.zhiganova:yNDn87
|
||||
s.zarubin:SSEfN2
|
||||
a.izilianov:YxyMEC
|
||||
vlv.kamenev:asFqP4
|
||||
a.kozin:PE4alc
|
||||
iu.kosolapov:SBlJrC
|
||||
i.kurilov:awoP0e
|
||||
v.mineev:FU9SuF
|
||||
e.mineeva:gCSLTd
|
||||
K.Pletnev:aKVxhI
|
||||
a.ponomarev:RZfCpL
|
||||
edg.sviderskii:Pt7285
|
||||
a.stepanova:qHrwoR
|
||||
z.tashbaeva:pC2mil
|
||||
iu.utkina:ZeMWdP
|
||||
n.kharitonova:2nFFzL
|
||||
a.shvarok:rToo2E
|
||||
# Большой босс
|
||||
r.ivanov:123
|
||||
Reference in New Issue
Block a user