php - 防止用户执行两次操作

标签 php javascript mysql

我们在用户执行特定操作两次时遇到了一些问题,我们有一种机制可以确保用户无法执行此操作但不知何故它仍然会发生。以下是我们当前机制的工作原理:

  1. 客户端:点击 1 次后按钮将被禁用。
  2. 服务器端:我们在 URL 中有一个 key 散列,将根据存储在 SESSIONS 中的 key 进行检查,一旦匹配,该 key 就会被删除。
  3. 数据库端:执行操作后,将标记一个字段,指示用户已完成操作。

但是,采取了所有这些措施,仍然有用户可以执行两次操作,是否有更安全的方法?

这是数据库端的部分代码:

$db->beginTransaction();
// Get the user's datas
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
    $db->rollback();
    // Return with error
    return false;
}
// Proceed with performing the action
// --- Action Here ---
// Double checking process, the user data is retrieved again
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
    $db->rollback();
    // Return with error
    return false;
}
// --- The final inserting query ---
// Update the flag
$db->query("UPDATE users SET flag = 1 WHERE userid = {$auth->getProperty('auth_user_id)}");
$db->commit();
return true;

最佳答案

很高兴看到您已采取一切措施打败坏人。说到坏人:

最后:

我建议您查看:

OWASP PHP Project

OWASP PHP 项目的目标(OWASP PHP 项目路线图)是使开发人员、系统管理员和应用程序架构师能够构建和部署使用 PHP 编程语言构建的安全应用程序。

关于php - 防止用户执行两次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658163/

相关文章:

php - 如何防止刷新时重复插入数据库?

php - 在第 32 行出现 fatal error : Call to a member function query() on a non-object in C:\wamp\www\quotes\paginator. php

javascript - 创建另一个帐户后显示失败 "Sorry, your registration failed. Please go back and try again."

php - 如何使用 PHP 循环 MySQL 数据

PHP MYSQL 死循环

php - 如何在 zend framework 2 中构建复杂的删除查询

php - MySQL 到 Redis 在一个巨大的表上,如何加快速度?

javascript - 如何处理按下后退按钮,图像应该持久

JavaScript 分隔符和闭包

javascript - 如何使用响应式设计将此菜单置于移动布局的中心