常见漏洞防护
了解 WordPress 常见安全漏洞及防护方法。
🚨 高危漏洞类型
| 漏洞类型 | 严重程度 | 常见位置 |
|---|---|---|
| SQL 注入 | 🔴 严重 | 用户输入 |
| XSS | 🔴 严重 | 内容输出 |
| CSRF | 🟠 高危 | 表单提交 |
| 文件上传 | 🔴 严重 | 媒体上传 |
| 弱密码 | 🟠 高危 | 用户认证 |
🛡️ 漏洞防护
SQL 注入防护
php
<?php
// ❌ 不安全
$id = $_GET['id'];
$results = $wpdb->get_results("SELECT * FROM wp_posts WHERE ID = $id");
// ✅ 安全 - 使用 prepare
$id = absint($_GET['id']);
$results = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID = %d", $id)
);1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
XSS 防护
php
<?php
// 输入验证
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$url = esc_url_raw($_POST['url']);
// 输出转义
echo esc_html($name); // 文本
echo esc_attr($class); // 属性
echo esc_url($url); // URL
echo wp_kses_post($content); // HTML 内容1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
CSRF 防护
php
<?php
// 生成 nonce
$nonce = wp_create_nonce('my_action');
// 表单中添加
?>
<input type="hidden" name="my_nonce" value="<?php echo $nonce; ?>">
<?php
// 验证 nonce
if (!wp_verify_nonce($_POST['my_nonce'], 'my_action')) {
wp_die('安全验证失败');
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
文件上传安全
php
<?php
function secure_upload($file) {
// 检查文件类型
$allowed_mimes = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'pdf' => 'application/pdf',
);
$filetype = wp_check_filetype($file['name']);
if (!in_array($filetype['type'], $allowed_mimes)) {
return new WP_Error('invalid_filetype', '不允许的文件类型');
}
// 检查文件大小
$max_size = 5 * 1024 * 1024; // 5MB
if ($file['size'] > $max_size) {
return new WP_Error('file_too_large', '文件大小超过限制');
}
return true;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
📊 安全检查工具
| 工具 | 说明 |
|---|---|
| WPScan | 漏洞扫描器 |
| Sucuri SiteCheck | 在线扫描 |
| Wordfence | 安全插件 |
