// PHP mysqli预处理示例$stmt = $conn->prepare("SELECT * FROM users WHERE email = ? AND password = ?");$email = $_POST['email'];$password = $_POST['password'];$stmt->bind_param("ss", $email, $password);|
普通查询 |
预处理语句 |
|
拼接字符串 |
分离 SQL 模板与数据 |
|
易受注入 |
100% 参数安全 |
|
单次编译执行 |
可复用执行计划,提升性能 |
// Eloquent安全查询$user = User::where('email', $request->email)->first();// 安全使用原生SQLDB::select(DB::raw('SELECT * FROM users WHERE id = ?'), [$id]);// 允许的表名白名单$allowed_tables = ['users', 'orders', 'products'];$table = $_GET['table'];if (!in_array($table, $allowed_tables)) {throw new InvalidArgumentException("非法操作");}// 邮箱格式校验if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {// 拒绝非法输入}// 手机号格式校验(中国)if (!preg_match('/^1[3-9]\d{9}$/', $phone)) {// 拒绝非法输入}// 强制转换为整数$id = (int)$_GET['id'];// 防止负数ID攻击if ($id <= 0) {// 拒绝非法ID}|
账户类型 |
权限范围 |
适用场景 |
|
管理员账户 |
ALL PRIVILEGES |
数据库管理 |
|
应用账户 |
SELECT/INSERT/UPDATE/DELETE |
业务操作 |
|
只读账户 |
SELECT |
报表查询 |
-- 创建受限账户CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';-- 授予最小必要权限GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'%';-- 回收危险权限REVOKE CREATE, DROP, ALTER FROM 'app_user'@'%';
-- 创建安全的登录存储过程DELIMITER $$CREATE PROCEDURE sp_user_login(IN p_email VARCHAR(50), IN p_password VARCHAR(50))BEGINSELECT * FROM usersWHERE email = p_emailAND password = SHA2(p_password, 256);END$$DELIMITER ;
# my.cnf配置[mysqld]validate_password_policy=STRONGvalidate_password_length=12
// 生产环境关闭详细错误error_reporting(0);ini_set('display_errors', 0);// 使用统一错误提示echo "服务器繁忙,请稍后再试";-- 开启慢查询日志SET GLOBAL slow_query_log = 1;SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';-- 审计所有查询SET GLOBAL general_log = 1;SET GLOBAL general_log_file = '/var/log/mysql/query.log';
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046748/viewspace-3088229/ ,如需转载,请注明出处,否则将追究法律责任。