Dynami c не подготовлено mysql запросов от ajax для администраторов. Плохая практика? - PullRequest
0 голосов
/ 03 мая 2020

Я хотел упростить реализацию частей интерфейса, которые контролируют базу данных, потому что создание отдельного подготовленного файла выписки для каждого простого запроса становилось действительно трудоемким. Поэтому я сделал этот простой скрипт для перехвата ajax запросов POST, используя эту php библиотеку, чтобы я мог просто отправить ajax запросов, таких как { db:'main', table:'blog', action:'delete', query: { id: 299 } (DELETE FROM blog WHERE id=299; in 'main' database)

, чтобы получить некоторые управление базой данных на внешнем интерфейсе.

Теперь, если этот тип сценария используется только на административном портале сайта, на другом виртуальном хосте с несколькими этапами аутентификации, будет ли это плохой практикой? Я не смог придумать ничего точного, что могло бы go ошибиться, но все же чувствую себя неуверенно по этому поводу.

Также обратите внимание на переменную $perm, которая указывает, какие действия разрешены в таблице.

admin.example.com/ajax/db_actions.php

header('Content-Type: application/json');
$perm = [
    'main' => [
        'blog' => [
            'delete',
            'insert',
            'select'
        ]
    ]
];
$q = $_POST;
if(empty($q['db']) || empty($q['table']) || empty($q['action']) || empty($q['query'])) {
    http_response_code(400);
    die();
}
if(!in_array($q['action'], $perm[$q['db']][$q['table']])) {
    http_response_code(401);
    die();
}
require_once('Database.php');
$db = new Database($q['db'], "username", "password", "localhost");

if($q['action'] == 'select') {
    $res = $db->select($q['table'], ...$q['query'])->result();
    if($res) {
        die(json_encode($res, 1));
    }
} else if($q['action'] == 'insert') {
    $res = $db->insert($q['table'], ...$q['query'])->id();
    if($res) {
        die(json_encode($res, 1));
    }
} else if($q['action'] == 'update') {
    if($db->update($q['table'], ...$q['query'])) {
        die(json_encode(true));
    }
} else if($q['action'] == 'delete') {
    if($db->delete($q['table'], $q['query'])) {
        die(json_encode(true));
    }
} else {
    http_response_code(400);
    die();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...