PHP应用程序安全:十大漏洞与防护

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP应用程序十大漏洞:如何保护您的代码



PHP仍然是Web开发中最流行的语言之一。然而,它的灵活性和简单性常常导致严重漏洞的出现。根据OWASP统计,超过70%的Web应用程序至少存在一个严重的安全漏洞。在本文中,我们将分析10种最常见的PHP应用程序漏洞,展示危险代码示例,并提供实用的安全建议。



1. SQL注入 (SQL Injection)



最著名且最危险的攻击方式。攻击者通过用户输入注入SQL代码。



危险代码:

<?php$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>


安全代码(使用预处理语句):

<?php$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>


建议:

  • 始终使用预处理语句(PDO或MySQLi)。
  • 切勿将用户数据直接拼接到SQL查询中。
  • 验证数据类型(例如,对ID使用is_numeric())。


2. XSS(跨站脚本攻击)



通过未经验证的数据将JavaScript代码注入页面。可窃取Cookie、重定向到钓鱼网站。



危险代码:

<?phpecho "你好," . $_GET['name'];?>


安全代码:

<?phpecho "你好," . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>


建议:

  • 使用htmlspecialchars()对输出进行转义。
  • 在响应头中设置Content-Security-Policy (CSP)。
  • 对于JSON响应,使用json_encode()。


3. CSRF(跨站请求伪造)



攻击者诱使已认证用户执行非自愿操作(例如转账)。



无保护的表单示例:

<form action="delete.php" method="POST">    <input type="hidden" name="id" value="123">    <input type="submit" value="删除"></form>


安全代码(带令牌):

<?phpsession_start();if (empty($_SESSION['token'])) {    $_SESSION['token'] = bin2hex(random_bytes(32));}?><form action="delete.php" method="POST">    <input type="hidden" name="token" value="<?= $_SESSION['token'] ?>">    <input type="hidden" name="id" value="123">    <input type="submit" value="删除"></form>


建议:

  • 为每个表单生成唯一的CSRF令牌。
  • 在执行操作前在服务器端验证令牌。
  • 使用SameSite Cookie(Lax或Strict)。


4. 不正确的身份验证和会话管理



会话保护薄弱、标识符泄露、会话固定攻击。



易受攻击的代码:

<?phpsession_start();if ($_POST['password'] == 'admin123') {    $_SESSION['logged'] = true;}?>


安全代码:

<?phpsession_start();session_regenerate_id(true); // 登录后更换会话ID

// 密码哈希$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);if (password_verify($input_password, $hash)) { $_SESSION['logged'] = true; $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];}?>


建议:

  • 使用password_hash()和pas

博客

书籍推荐