在 PHP 开发中,确认表单提交来源对于防止伪造请求至关重要。通过以下方法可以有效识别提交请求是否来自预期页面,提高网站的安全性。
HTTP 引用头包含了用户访问当前页面的来源 URL。通过检测此头,可以确认请求是否来自同一域名:
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') !== false) {
// 请求来自同一域名
}
POST 数据包含表单提交的信息。通过检查特定字段(如隐藏字段)的值是否符合预期,可以验证请求来源:
if (isset($_POST['nonce']) && $_POST['nonce'] === 'expected_nonce') {
// 请求来自预期的表单
}
CSRF 令牌是一个在每次会话中随机生成的字符串,可以在表单中作为隐藏字段提交,并与会话中的令牌进行比对:
// 在会话中存储 CSRF 令牌
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 在表单中包含隐藏字段
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
// 检查提交的令牌
if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
// 请求来自预期的表单
}
Salt 是一个随机字符串,将其添加到提交的数据中并进行散列处理,可以防止数据伪造:
// 生成盐
$salt = bin2hex(random_bytes(32));
// 将盐添加到数据
$data = 'some_data' . $salt;
// 散列数据
$hash = hash('sha256', $data);
// 检查提交的 hash
if (isset($_POST['hash']) && $_POST['hash'] === $hash) {
// 请求来自预期的表单
}
通过以上方法中的一种或多种组合,开发者可以在 PHP 中有效确认表单提交的来源,从而防止伪造请求,提高 Web 应用程序的安全性。