2015-07-20 3 views
0

Я новичок в Angular и Data Api с Slim. Я создаю данные Api с Slim, используемыми Angular. Мой апи код ниже:Угловые и тонкие рамки для безопасности базы данных Mysql

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; 
    }); 
}); 

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

+0

для стартеров ... не привязывают функцию, которая выводит все ваши пользовательские данные, не выполняя никаких авторизаций или аутентификации на маршруте. – Orangepill

+0

@Orangepill Спасибо, есть ли какой-нибудь ресурс, который я мог бы узнать об этом? – praHoc

+0

Держись, я уже делал этот ответ ... –

ответ

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, токен доступа, учебник как термины, потому что это очень простой ответ на сложный вопрос.

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

+0

Спасибо, это очень помогает. Я читал больше, хотя. – praHoc

+0

Также посмотрите на http-перехватчики в угловом для добавления ключа! –

 Смежные вопросы

  • Нет связанных вопросов^_^