2017-06-18 10 views
0

私はRESTfulなAPIを持っていますが、誰もが何もできないように安全でありたいです。スリムフレームワーク - APIセキュリティ

$app->get('/users' , function(Request $request, Response $response){ 
    $sql = "SELECT * FROM users"; 

    try{ 
    // Get db object 
    $db = new db(); 
    // Connect 
    $db = $db->connect(); 

    $stmt = $db->query($sql); 
    $users = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $db = null; 
    echo json_encode($users); 
    } catch(PDOException $e){ 
    echo '{"error": {"text": '.$e->getMessage().'}}'; 
    } 
}); 

私がhttp://localhost/API/usersに行くと、私はすべてのユーザーをjsonテーブルに入れます。

私のデータベースの中に私のデータは、私は誰もが私のAPIを介して、あなたがlevel 5であれば、自分の表を参照してくださいしたいと思います[{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"[email protected]"}] のように保存されます。

解決策はありますか?

+0

このコードは安全ではありません。準備されたステートメントを使用する必要があります – geggleto

+0

私は 'user add'のために準備されたステートメントを使用します。ユーザーを追加したりユーザーを削除したりするために特別なレベルが必要なことをどのようにして安全にすることができますか? –

+0

サイドノート:プレーンな文字列連結でJSONを生成すると、ランダムに破損します。あなたはすでに 'json_encode()'を知っていて、どこでも使えます。 –

答えて

3

あなたの例は非常に基本的なものであり、REST APIでいくつかの「認証」概念を使用するための出発点です。

最初のもの:認証!=認証。

これらの2つの概念を分割すると、最初のものはユーザーを登録してアプリにログインさせ、もう1つはこの例では「難しい作業」を行います。特定のユーザーがいくつかのことをすることができる。

認証には、必要なすべてのメソッドを提供できますが、RESTではアプリケーションがステートレスでなければならないことを覚えておいてください。アプリケーションで使用されるトークンをHTTPヘッダーで渡す必要があります。ユーザーはLOGGEDであり、CANはいくつかのことを行います。

これはキーコンセプトです。トークン(JWTまたはOAUTHを参照)を承認に使用し、非常に基本的な承認は「USER LOGGED」です。

例では、http要求をフィルタリングするためにmiddlewaresを使用し、ユーザが許可されていない(ログインしていない場合は|| minLevel:5がない)ルータコールバックには入力しないでください。

チェックアウトJWTまたはOAuth2は、このような詳細情報です。

チェックこのアウト - >(https://github.com/damianopetrungaro/slim-boilerplate)スリムアプリでJWT世代の基本的な例(あなたはこの決まり文句を使用しようとしているならば、これはかなり基本的な例であるハッシュパスワードのMD5を使用しないでください)用

+0

JWT:https://jwt.io OAuth:https://oauth.net/2/ – damianopetrungaro

1

認証を追加してからAPIに権限を追加する必要があります。

認証は、誰がAPIにアクセスしているかを知るプロセスです。これを行う良い方法はOAuth 2です。Brent Shaffer's OAuth 2.0 Serverライブラリが好きです。 https://github.com/akrabat/slim-bookshelf-api/tree/master/apiには、OAuth 2を使用してユーザーを認証するAPIの実装が含まれています。

誰がログインしているか分かったら、役割(またはレベル)に基づいてアクセスを制限する必要があります。これはアクセス制御と呼ばれます。私はこれのzendコンポーネントが好きです。試してzend-permissions-rbac - ZF blogでそれを使用する方法に関する良い記事があります。

関連する問題