Угловой и тонкий каркас для безопасности базы данных Mysql

0

Я новичок в Angular и Data Api с Slim. Я создаю данные Api с Slim, используемыми Angular. Мой код api приведен ниже:

include 'dbConfig.php';
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$slim_app = new \Slim\Slim();

$slim_app->get('/getUser','getUser');
$slim_app->post('/updateUser','updateUser');
$slim_app->post('/newUser','newUser');

$slim_app->run();


function getUser(){
    global $mysqli;
    $result = $mysqli->query("select * from users");
    if(!$result){ echo "not connect";}
    $rows = array();
    while($row = $result->fetch_assoc()){
     $rows[] = $row; 
    }
    //echo "<pre>";
    print json_encode($rows);
} 

Мой контроллер

myApp.controller('Ctrl',function ($scope, $http) {    

    $http.get('api/getUser').
    success(function(data, status, headers, config){
      $scope.obj = data;
    });
});

Когда я перехожу к localhost/api/getUser, я могу видеть все мои данные json, чтобы все могли видеть. как я могу только разрешить моему Угловому приложению использовать мой api, чтобы он был безопасным?

  • 0
    для начала ... не связывайте функцию, которая выводит все ваши пользовательские данные без выполнения какой-либо авторизации или аутентификации на маршруте.
  • 0
    @Orangepill Спасибо, есть ли какой-нибудь ресурс, который я мог бы изучить?
Показать ещё 1 комментарий
Теги:
slim

1 ответ

0
Лучший ответ

Правильно,

Это сложный вопрос, но в простейшей форме вам нужен логин, который возвращает ключ API вашему клиенту, как...

ПРИМЕЧАНИЕ. Это очень простой код, который я использую для целей тестирования, он не имеет надлежащего хэширования паролей и проверки срока доступа к токену плюс справедливый бит другой безопасности. Это просто иллюстрирует простой пример.

app->get('/login/:username/:password', function ($username, $password) use ($app, $db) {
    //check the login details against the db...
   // TODO Include hashing FIX BEFORE PRODUCTION 
    $db->where("userName",  $username);
    $db->where("password", $password);
    $result = $db->getOne('Users');

    if ($db->count === 0) {
        setResponseCode(401, array("Error" => "Incorrect login details."));
        return;
    }

    // The way this key is generated needs updating, only for testing purposes.
    $key = date("Y-m-d");
    $key = $key . $username;
    $key = md5($key);
    // Need to add expiry time to access tokens....
    $expire = date("Y-m-d H:i:s", strtotime('+15 minutes'));

     $data = Array ('accessToken'  => $key);

    $db->where('id', $result['id']);
    if (!$db->update('Users', $data)) {
        // Internal error - this shouldn't happen!
        setResponseCode(500, array("Error" => "Database error."));
        return;
    }
    // Slim by default returns 200 so no need to call setResponseCode
    echo json_encode(array("Authorisation" => $key));
});

function setResponseCode($code, $arrayJson) {
    global $app;
    /*
      Function to save repetition of response headers - params are:
      Int Code - HTTP Response Code
      Array array_json - an array to be serialized into a JSON response ie array("Key" => "Item")
     */
    $app->response->setStatus($code);
    $app->response->SetBody(json_encode($arrayJson));
    $app->response->headers->set('Content-Type', 'application/json');
}

function authorise($key) {
    // Middleware for routes that require auth!
    //global $key;
    global $userId;
    global $app;
    global $db;

    // need to add check for token expiry here!

    $db->where('accessToken', $key);
   $results = $db->getOne('Users', null, array('id'));

    if ($db->count === 0) {

        setResponseCode(401, array("Error" => "Authorisation Failure"));
        $app->stop();
        //return false;
    }

    $userId = $results['id'];
    return true;
}

Вашему клиенту необходимо сохранить ключ и добавить его к параметрам в любой запрос, который вы можете использовать с заголовками или просто с простыми параметрами. Опять же, я использовал google slim, API, токен доступа, учебник как термины, потому что это очень простой ответ на сложный вопрос.

Теперь вы просто добавляете authorize ($ key) в начало любого маршрута, который ему нужен, если он ложный, он вернет 401 и прекратит дальнейшее выполнение. Я бы рекомендовал сделать еще немного чтения, хотя это очень, очень простой ответ.

  • 0
    Спасибо, это очень помогает. Я читал больше, хотя.
  • 0
    Также посмотрите на http перехватчики в угловых для добавления ключа!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню