Contact Form 7 Rest API blocking for better protection
All checks were successful
Generate Build Info / build-info (push) Successful in 2s
All checks were successful
Generate Build Info / build-info (push) Successful in 2s
This commit is contained in:
62
dapper.php
62
dapper.php
@@ -1248,6 +1248,68 @@ if ( class_exists( 'WPCF7' ) ) {
|
|||||||
</span>';
|
</span>';
|
||||||
return $hp . $form;
|
return $hp . $form;
|
||||||
}
|
}
|
||||||
|
add_filter('rest_pre_dispatch', 'dapper_block_cf7_rest_spam', 10, 3);
|
||||||
|
|
||||||
|
function dapper_block_cf7_rest_spam($result, $server, $request) {
|
||||||
|
|
||||||
|
$route = $request->get_route();
|
||||||
|
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
|
||||||
|
dapper_debug_log("CF7 REST HIT from IP: $ip → $route");
|
||||||
|
|
||||||
|
// Only target CF7 submissions
|
||||||
|
if (strpos($route, '/contact-form-7/') === false) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// LOG ALL HITS
|
||||||
|
dapper_debug_log('CF7 REST HIT → ' . $route);
|
||||||
|
|
||||||
|
$params = $request->get_params();
|
||||||
|
|
||||||
|
// 1. Require JS token
|
||||||
|
if (empty($params['dapper_token']) || strpos($params['dapper_token'], 'dpr_') !== 0) {
|
||||||
|
|
||||||
|
dapper_debug_log('BLOCKED REST: Missing JS token');
|
||||||
|
|
||||||
|
return new WP_Error(
|
||||||
|
'dapper_spam_block',
|
||||||
|
'Spam detected',
|
||||||
|
['status' => 403]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Require timestamp
|
||||||
|
if (empty($params['dapper_ts'])) {
|
||||||
|
|
||||||
|
dapper_debug_log('BLOCKED REST: Missing timestamp');
|
||||||
|
|
||||||
|
return new WP_Error(
|
||||||
|
'dapper_spam_block',
|
||||||
|
'Spam detected',
|
||||||
|
['status' => 403]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Speed check
|
||||||
|
$elapsed = time() - (int)$params['dapper_ts'];
|
||||||
|
|
||||||
|
if ($elapsed < 3) {
|
||||||
|
|
||||||
|
dapper_debug_log('BLOCKED REST: Too fast');
|
||||||
|
|
||||||
|
return new WP_Error(
|
||||||
|
'dapper_spam_block',
|
||||||
|
'Spam detected',
|
||||||
|
['status' => 403]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user