我遇到了这种情况,我需要验证它是否是向服务器发送请求/信息的正确用户。例如,用户提交删除朋友请求,在URL中作为参数我包括朋友的id(另一个成员id);我是否还应该包括要求朋友删除请求的ID的成员?
我只是想验证或确保它是发送请求的正确用户。一般来说,最好的方法是什么?如果用户已登录,我们可以通过登录成员的ID进行验证吗?或者有更好的方法吗?
答案 0 :(得分:2)
不知道您的身份验证是如何工作的,这有点难以说清楚。
过去我必须这样做时,我使用服务器端身份验证的组合来识别发送请求的用户,并使用URL参数来指定他们想要删除的内容。用户需要登录才能发送删除请求,并且我使用$ _SESSION变量跟踪其userID。因此,当我收到删除请求时,SQL看起来很模糊:
DELETE FROM
friends
WHERE
userID=$_SESSION["id"] AND friendID=$_POST["friend"]
正如halfer在评论中解释的那样,这是一种糟糕的做事方式,因为它在代码中打开了SQL注入漏洞。你可以考虑几种方法来避免这种情况。
首先,您可以清理数据 - 如果您知道您的friendID总是一个整数,您可以检查它。用于检查非数字字符的正则表达式将起作用 - 如果存在任何狡猾的东西,您可以适当地处理它而不将其传递给数据库。
第二种方法是我更喜欢的方法 - 当您进行查询时,可以使用预准备语句,并将参数绑定到它。使用PDO,您最终会看到类似的内容:
$sth = $dbh->prepare('DELETE FROM friends WHERE userID=? AND friendID=?');
$sth->bindParam(1, $_SESSION["id"]);
$sth->bindParam(2, $_POST["friend"]);
$sth->execute();
答案 1 :(得分:0)
使用session variable存储登录的用户ID。一旦会话建立并且您的身份验证方案插入logged in
标志,您就完成了所有设置。只需在需要执行任何用户请求时检查logged in
标志。
答案 2 :(得分:0)
尝试为这些请求要求更安全的UUID标识符(由您生成和存储),它们仍然不是完全安全,但比简单的ID要好得多