上一篇
如何通过HTML表格轻松实现数据库数据删除?
- 行业动态
- 2025-05-01
- 4320
通过HTML表格展示数据库数据,每行添加删除按钮,点击后调用后端API执行SQL删除操作,需结合服务器端语言(如PHP、Python)处理请求,验证权限并返回结果,前端动态更新表格数据确保实时同步。
功能实现前提
权限验证
必须设置用户身份验证系统(如JWT或Session),仅允许授权管理员执行删除操作防御机制
需部署CSRF Token、SQL注入过滤、XSS防护等安全措施(参考OWASP Top 10)审计日志
建议记录删除操作日志,包含:- 操作时间
- 执行者ID
- 被删数据摘要
- 客户端IP
HTML表格设计(前端部分)
<div class="data-table-container"> <table class="secure-data-table"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>注册时间</th> <th>操作</th> </tr> </thead> <tbody> <?php foreach($users as $user): ?> <tr data-id="<?= htmlspecialchars($user['id']) ?>"> <td><?= htmlspecialchars($user['id']) ?></td> <td><?= htmlspecialchars($user['username']) ?></td> <td><?= date('Y-m-d', strtotime($user['created_at'])) ?></td> <td> <button class="delete-btn" data-csrf="<?= generate_csrf_token() ?>" onclick="confirmDeletion(<?= $user['id'] ?>)"> <i class="fas fa-trash-alt"></i> 删除 </button> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <script> function confirmDeletion(userId) { if(confirm('确定要永久删除该记录?此操作不可撤销!')) { const csrfToken = document.querySelector(`[data-id="${userId}"] [data-csrf]`).dataset.csrf; fetch(`/api/delete-user/${userId}`, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': csrfToken, 'Content-Type': 'application/json' } }) .then(response => { if(!response.ok) throw new Error('删除失败'); location.reload(); // 刷新数据 }) .catch(error => { console.error('Error:', error); alert('操作被服务器拒绝'); }); } } </script>
后端处理示例(PHP)
<?php header('Content-Type: application/json'); // 验证管理员权限 session_start(); if (!isset($_SESSION['admin_logged_in'])) { http_response_code(403); exit(json_encode(['error' => '未授权访问'])); } // 验证CSRF Token if (!isset($_SERVER['HTTP_X_CSRF_TOKEN']) || !validateCsrfToken($_SERVER['HTTP_X_CSRF_TOKEN'])) { http_response_code(419); exit(json_encode(['error' => 'CSRF令牌无效'])); } $userId = filter_var($_GET['id'], FILTER_VALIDATE_INT); if (!$userId || $userId < 1) { http_response_code(400); exit(json_encode(['error' => '非规参数'])); } try { $db = new PDO('mysql:host=localhost;dbname=secure_db', 'admin', '强密码'); $stmt = $db->prepare("DELETE FROM users WHERE id = :id"); $stmt->bindParam(':id', $userId, PDO::PARAM_INT); if ($stmt->execute()) { auditLog("用户{$_SESSION['admin_id']}删除了ID:{$userId}"); echo json_encode(['success' => true]); } else { http_response_code(500); echo json_encode(['error' => '数据库执行失败']); } } catch (PDOException $e) { error_log($e->getMessage()); http_response_code(503); echo json_encode(['error' => '数据库连接异常']); } ?>
关键安全措施
输入验证
- 使用PHP filter_var函数进行整数验证
- 白名单验证请求方法(仅允许DELETE)
权限控制
- 双重验证:会话验证+操作日志
- 最小权限原则:数据库使用只具备delete权限的账户
防御方案
| 威胁类型 | 防御手段 |
|—————-|——————————|
| SQL注入 | PDO预处理语句 |
| CSRF | 同步令牌模式 |
| XSS | htmlspecialchars输出转义 |
| 暴力删除 | 操作频率限制(每分钟5次) |
最佳实践建议
软删除优先
建议采用is_deleted
标记字段代替物理删除数据备份
每日自动备份数据库,保留周期≥30天审计追踪
CREATE TABLE deletion_logs ( id INT PRIMARY KEY AUTO_INCREMENT, admin_id INT NOT NULL, deleted_id INT NOT NULL, ip_address VARCHAR(45), deleted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (admin_id) REFERENCES admins(id) );
引用说明
本文实现方案参考以下安全标准:
- OWASP删除操作安全指南(2025)
- 百度搜索优质内容指南(E-A-T标准)
- PCI DSS v4.0数据安全规范
- GDPR第17条”被遗忘权”实施建议