本文目录导读:

在 Laravel 中验证 IP 地址有多种方式,以下是几种常见方法:
使用验证规则
基本 IP 验证
$request->validate([
'ip_address' => 'required|ip',
]);
验证特定版本
// IPv4
$request->validate([
'ip_address' => 'required|ipv4',
]);
// IPv6
$request->validate([
'ip_address' => 'required|ipv6',
]);
允许空值
$request->validate([
'ip_address' => 'nullable|ip',
]);
自定义验证规则
在白名单中的 IP
use Illuminate\Support\Facades\Validator;
Validator::extend('allowed_ip', function ($attribute, $value, $parameters, $validator) {
$allowedIps = ['192.168.1.1', '10.0.0.1', '::1'];
return in_array($value, $allowedIps);
});
// 使用
$request->validate([
'ip_address' => 'required|allowed_ip',
]);
IP 范围验证
use Illuminate\Support\Facades\Validator;
Validator::extend('ip_in_range', function ($attribute, $value, $parameters, $validator) {
$range = $parameters[0] ?? '192.168.1.0/24';
// 简单的 IP 范围检查
if (strpos($range, '/') !== false) {
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($value);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return ($ip & $mask) == $subnet;
}
return false;
});
// 使用
$request->validate([
'ip_address' => 'required|ip_in_range:192.168.1.0/24',
]);
在 Form Request 中使用
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreIpRequest extends FormRequest
{
public function rules()
{
return [
'ip_address' => 'required|ip|unique:ip_records,ip_address',
'description' => 'nullable|string|max:255',
];
}
public function messages()
{
return [
'ip_address.required' => 'IP 地址是必需的',
'ip_address.ip' => '请输入有效的 IP 地址',
'ip_address.unique' => '该 IP 地址已存在',
];
}
}
控制器中的完整示例
namespace App\Http\Controllers;
use App\Models\IpRecord;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class IpController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'ip_address' => [
'required',
'ip',
function ($attribute, $value, $fail) {
// 自定义验证逻辑
if (strpos($value, '192.168.') === 0) {
$fail('不允许使用内网 IP 地址');
}
},
],
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
// 存储 IP 地址
IpRecord::create($request->all());
return response()->json(['message' => 'IP 地址已保存']);
}
}
JavaScript 用于实时验证 IP 地址
function isValidIP(ip) {
const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
const ipv6Regex = /^([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}$/;
if (ipv4Regex.test(ip)) {
// 验证每个数字在 0-255 之间
return ip.split('.').every(num => {
const n = parseInt(num, 10);
return n >= 0 && n <= 255;
});
}
return ipv6Regex.test(ip);
}
最佳实践建议
- 白名单验证:对于敏感操作,验证 IP 是否在白名单中
- 频率限制:配合
throttle中间件防止滥用 - 日志记录:记录所有 IP 验证失败的尝试
- 错误信息:提供清晰的错误提示
选择哪种方式取决于你的具体需求,对于大多数场景,使用内置的 ip 或 ipv4/ipv6 规则就足够了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播