Add ! syntax (NOT) to filters. Don't throttle duplicate post bodies when they are empty

This commit is contained in:
Michael Foster 2013-09-07 12:58:23 +10:00
parent 55dc5cedc3
commit b7f16dee0f
2 changed files with 10 additions and 6 deletions

View File

@ -305,7 +305,7 @@
$config['filters'][] = array( $config['filters'][] = array(
'condition' => array( 'condition' => array(
'flood-match' => array('ip'), // Only match IP address 'flood-match' => array('ip'), // Only match IP address
'flood-time' => &$config['flood_time'] // 10 seconds minimum 'flood-time' => &$config['flood_time']
), ),
'action' => 'reject', 'action' => 'reject',
'message' => &$config['error']['flood'] 'message' => &$config['error']['flood']
@ -315,7 +315,8 @@
$config['filters'][] = array( $config['filters'][] = array(
'condition' => array( 'condition' => array(
'flood-match' => array('ip', 'body'), // Match IP address and post body 'flood-match' => array('ip', 'body'), // Match IP address and post body
'flood-time' => &$config['flood_time_ip'] // 2 minutes minimum 'flood-time' => &$config['flood_time_ip'],
'!body' => '/^$/', // Post body is NOT empty
), ),
'action' => 'reject', 'action' => 'reject',
'message' => &$config['error']['flood'] 'message' => &$config['error']['flood']
@ -325,7 +326,7 @@
$config['filters'][] = array( $config['filters'][] = array(
'condition' => array( 'condition' => array(
'flood-match' => array('body'), // Match IP address and post body 'flood-match' => array('body'), // Match IP address and post body
'flood-time' => &$config['flood_time_same'] // 30 seconds minimum 'flood-time' => &$config['flood_time_same']
), ),
'action' => 'reject', 'action' => 'reject',
'message' => &$config['error']['flood'] 'message' => &$config['error']['flood']

View File

@ -168,11 +168,14 @@ class Filter {
public function check(array $post) { public function check(array $post) {
foreach ($this->condition as $condition => $value) { foreach ($this->condition as $condition => $value) {
if (!$this->match($post, $condition, $value)) if ($condition[0] == '!') {
$NOT = true;
$condition = substr($condition, 1);
} else $NOT = false;
if ($this->match($post, $condition, $value) == $NOT)
return false; return false;
} }
/* match */
return true; return true;
} }
} }