跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
PHP数据库安全
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= PHP数据库安全 = '''PHP数据库安全'''是指在使用PHP与数据库交互时,采取一系列措施防止SQL注入、数据泄露、权限提升等安全威胁的实践方法。数据库安全是Web开发中最关键的安全领域之一,直接影响用户数据的完整性和隐私保护。 == 核心安全威胁 == === SQL注入 === SQL注入是最常见的数据库安全威胁,攻击者通过构造恶意SQL语句,绕过应用程序的验证机制,直接操作数据库。 '''示例攻击场景''': <syntaxhighlight lang="php"> // 危险代码示例 $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; </syntaxhighlight> 攻击者输入:<code>username = ' OR '1'='1</code>,会导致SQL变为: <syntaxhighlight lang="sql"> SELECT * FROM users WHERE username='' OR '1'='1' AND password='任意值' </syntaxhighlight> === 其他威胁 === * '''敏感数据泄露''':未加密存储密码或个人信息 * '''权限滥用''':数据库账户权限过高 * '''CSRF攻击''':通过伪造请求执行数据库操作 * '''暴力破解''':针对弱密码的反复尝试 == 防护措施 == === 预处理语句(Prepared Statements) === 最有效的SQL注入防护方案,使用参数化查询: <syntaxhighlight lang="php"> // PDO预处理示例 $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->execute([ 'username' => $_POST['username'], 'password' => $_POST['password'] ]); </syntaxhighlight> === 输入验证 === 使用过滤函数验证用户输入: <syntaxhighlight lang="php"> // 过滤示例 $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if (!$email) { die("无效的邮箱格式"); } </syntaxhighlight> === 最小权限原则 === 数据库用户应遵循: <mermaid> pie title 数据库账户权限分配 "SELECT" : 45 "INSERT" : 20 "UPDATE" : 15 "DELETE" : 10 "其他" : 10 </mermaid> === 密码安全 === 存储密码必须使用单向哈希: <syntaxhighlight lang="php"> // 密码哈希示例 $hashedPassword = password_hash($_POST['password'], PASSWORD_DEFAULT); // 验证密码 if (password_verify($inputPassword, $storedHash)) { // 登录成功 } </syntaxhighlight> == 进阶安全实践 == === 数据库防火墙 === 配置规则阻止可疑查询: * 阻止包含<code>DROP TABLE</code>的语句 * 限制查询频率 * 检测异常访问模式 === 审计日志 === 记录所有数据库操作: <syntaxhighlight lang="sql"> -- MySQL审计示例 CREATE TABLE audit_log ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, action VARCHAR(255), query TEXT, created_at TIMESTAMP ); </syntaxhighlight> === 加密存储 === 对敏感字段加密: <syntaxhighlight lang="php"> // 加密示例 $key = openssl_random_pseudo_bytes(32); $iv = openssl_random_pseudo_bytes(16); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv); </syntaxhighlight> == 实际案例 == '''电商网站用户系统安全改造''': 1. '''问题''':原有系统使用明文SQL拼接 2. '''改造措施''': * 全部改为PDO预处理 * 密码存储改用bcrypt哈希 * 增加登录失败限制 3. '''结果''': * SQL注入攻击减少100% * 数据泄露事件归零 == 数学基础 == 密码哈希强度计算: <math> H = -\sum_{i=1}^{n} p_i \log_2 p_i </math> 其中<math>p_i</math>是字符出现的概率。 == 最佳实践清单 == * 始终使用预处理语句 * 对所有输入进行验证和过滤 * 使用强密码哈希算法 * 定期备份数据库 * 保持PHP和数据库软件更新 * 限制数据库错误信息显示 == 参见 == * [[PHP安全编程]] * [[数据库设计原则]] * [[Web应用防火墙]] [[Category:编程语言]] [[Category:PHP]] [[Category:PHP数据库操作]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)