PHP MVC用户管理



我正在创建我自己的PHP MVC框架,并希望管理用户,为此,我有一个动态url,它是创建一个表单操作,如下所示:

<form action="users/delete/<?=$user->id?>" method="post">
<input type="hidden" name="_method" value="delete-submit" name="delete-submit">
<button type="submit" class="btn bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded">Delete</button>
</form>

我不知道这样做是否正确,所以我问一下。这重定向到/users/delete/$id,但我是否需要处理这样的表单请求:

if(!empty($_POST['delete-submit'])) {
$user = $this->model("user");
$user->deleteUser($value);
header("Location:".ROUTE."home/users");
}

或者我可以只使用url而忽略POST请求。

我不会指望$_POST['delete-submit']变量,因为例如,如果你使用像Postman这样的工具,你可以手动创建这样的请求并删除任何用户,考虑到你只是检查$_POST['delete-submit']是否设置。

所以如果你要删除用户,应该有一些授权机制。

  1. users/delete删除用户的路由->这是正确的
  2. 然后通过$_SESSION['UserId']检查是哪个用户提出了这样的请求,如果他被授权/有这样的权限,则删除该用户。

像…

function deleteUser($userId) {
if(user::hasDeletePermission($_SESSION['UserId']) {
'delete the user';
}
}

如果你已经有了这样的基于授权的机制,只需要额外的检查,用户是否真的提交/点击了那个按钮,例如,对于CSRF攻击,那么我会创建Token(一些随机的字符串,带有数字和字符)并保存到用户的会话中,这将作为隐藏的输入元素的值嵌入到表单中。

:

<form method="POST" action="users/delete">
<input type="hidden" name="csrfToken" value="token"/>
</form>
function deleteUser($userId) {
if($_POST['csrfToken'] === $_SESSION['csrfToken'] && user::hasDeletePermission($_SESSION['UserId']) {
'delete the user';
}
}

最新更新