【问题标题】:Slim framework - API SecuritySlim 框架 - API 安全性
【发布时间】:2025-12-16 12:45:01
【问题描述】:

所以我有一个 RESTful 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 表中。

在我的数据库中,我的数据存储为[{"id":"1","username":"werknemer","password":"...","level":"1","name":"piet","surname":"jan","email":"pietjan@gmail.nl"}] 如果你是level 5,我希望每个人都能通过我的 API 看到自己的表格。

有解决办法吗?

【问题讨论】:

  • 此代码不安全。您应该使用准备好的语句
  • 我对@9​​87654325@ 使用准备好的语句。如何确保您需要特殊级别来添加用户或删除用户?
  • 旁注:如果您生成带有纯字符串连接的 JSON,它将随机中断。你已经知道json_encode(),到处使用它。

标签: php api authentication slim


【解决方案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 上有一篇关于如何使用它的好文章。

【讨论】:

    【解决方案2】:

    您的示例非常基础,它是在您的 REST API 中使用一些“身份验证”概念的起点。

    首要任务:身份验证!= 授权。

    拆分这两个概念,第一个是让用户注册并登录到您的应用程序,第二个是您在此示例中寻找的“努力工作”,因此请检查特定用户是否能够做一些事情。

    对于身份验证,您可以提供所需的所有方法,但请记住,在 REST 中,您的应用程序必须是无状态的,并且您应该提供一个令牌(通过 HTTP 标头传递),您的应用程序将使用该令牌来了解用户是否已记录,可以做一些事情。

    这是关键概念:应该使用令牌(请参阅 JWT 或 OAUTH)进行授权,并且非常基本的授权是:“USER LOGGED”。

    在你的例子中,你应该使用middlewares来过滤http请求,如果用户没有被授权(登录||没有minLevel:5),不要进入路由器回调。

    查看 JWT 或 OAuth2 以获得更多信息。

    检查一下 -> (https://github.com/damianopetrungaro/slim-boilerplate) 了解在苗条应用程序中生成 JWT 的基本示例(如果您要使用此样板,请不要使用 md5 作为哈希密码,这是一个非常基本的示例)

    【讨论】: