summaryrefslogtreecommitdiff
path: root/inc/config.php
diff options
context:
space:
mode:
authorMichael Foster <savetheinternet@tinyboard.org>2013-09-06 23:09:18 +1000
committerMichael Foster <savetheinternet@tinyboard.org>2013-09-06 23:09:18 +1000
commitf309e4037c11197e4392e402992882358e4678c7 (patch)
treec0b7bbc65801ba693db55b847db3bddcbcc894a4 /inc/config.php
parent14ff0fbeb3fd93e94a804d647971b8a9551c327f (diff)
Better and faster basic flood prevention, while merging it into $config['filters'].
Diffstat (limited to 'inc/config.php')
-rw-r--r--inc/config.php177
1 files changed, 114 insertions, 63 deletions
diff --git a/inc/config.php b/inc/config.php
index e8b65967..81cae233 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -168,13 +168,6 @@
* ====================
*/
- // Minimum time between between each post by the same IP address.
- $config['flood_time'] = 10;
- // Minimum time between between each post with the exact same content AND same IP address.
- $config['flood_time_ip'] = 120;
- // Same as above but by a different IP address. (Same content, not necessarily same IP address.)
- $config['flood_time_same'] = 30;
-
/*
* To further prevent spam and abuse, you can use DNS blacklists (DNSBL). A DNSBL is a list of IP
* addresses published through the Internet Domain Name Service (DNS) either as a zone file that can be
@@ -283,6 +276,118 @@
$config['recaptcha_public'] = '6LcXTcUSAAAAAKBxyFWIt2SO8jwx4W7wcSMRoN3f';
$config['recaptcha_private'] = '6LcXTcUSAAAAAOGVbVdhmEM1_SyRF4xTKe8jbzf_';
+ /*
+ * Custom filters detect certain posts and reject/ban accordingly. They are made up of a condition and an
+ * action (for when ALL conditions are met). As every single post has to be put through each filter,
+ * having hundreds probably isn't ideal as it could slow things down.
+ *
+ * By default, the custom filters array is populated with basic flood prevention conditions. This
+ * includes forcing users to wait at least 5 seconds between posts. To disable (or amend) these flood
+ * prevention settings, you will need to empty the $config['filters'] array first. You can do so by
+ * adding "$config['filters'] = array();" to inc/instance-config.php. Basic flood prevention used to be
+ * controlled solely by config variables such as $config['flood_time'] and $config['flood_time_ip'], and
+ * it still is, as long as you leave the relevant $config['filters'] intact. These old config variables
+ * still exist for backwards-compatability and general convenience.
+ *
+ * Read more: http://tinyboard.org/docs/index.php?p=Config/Filters
+ */
+
+ // Minimum time between between each post by the same IP address.
+ $config['flood_time'] = 10;
+ // Minimum time between between each post with the exact same content AND same IP address.
+ $config['flood_time_ip'] = 120;
+ // Same as above but by a different IP address. (Same content, not necessarily same IP address.)
+ $config['flood_time_same'] = 30;
+
+ // Minimum time between posts by the same IP address (all boards).
+ $config['filters'][] = array(
+ 'condition' => array(
+ 'flood-match' => array('ip'), // Only match IP address
+ 'flood-time' => &$config['flood_time'] // 10 seconds minimum
+ ),
+ 'action' => 'reject',
+ 'message' => &$config['error']['flood']
+ );
+
+ // Minimum time between posts by the same IP address with the same text.
+ $config['filters'][] = array(
+ 'condition' => array(
+ 'flood-match' => array('ip', 'body'), // Match IP address and post body
+ 'flood-time' => &$config['flood_time_ip'] // 2 minutes minimum
+ ),
+ 'action' => 'reject',
+ 'message' => &$config['error']['flood']
+ );
+
+ // Minimum time between posts with the same text. (Same content, but not always the same IP address.)
+ $config['filters'][] = array(
+ 'condition' => array(
+ 'flood-match' => array('body'), // Match IP address and post body
+ 'flood-time' => &$config['flood_time_same'] // 30 seconds minimum
+ ),
+ 'action' => 'reject',
+ 'message' => &$config['error']['flood']
+ );
+
+ // Example: Minimum time between posts with the same file hash.
+ // $config['filters'][] = array(
+ // 'condition' => array(
+ // 'flood-match' => array('file'), // Match file hash
+ // 'flood-time' => 60 * 2 // 2 minutes minimum
+ // ),
+ // 'action' => 'reject',
+ // 'message' => &$config['error']['flood']
+ // );
+
+ // An example of blocking an imaginary known spammer, who keeps posting a reply with the name "surgeon",
+ // ending his posts with "regards, the surgeon" or similar.
+ // $config['filters'][] = array(
+ // 'condition' => array(
+ // 'name' => '/^surgeon$/',
+ // 'body' => '/regards,\s+(the )?surgeon$/i',
+ // 'OP' => false
+ // ),
+ // 'action' => 'reject',
+ // 'message' => 'Go away, spammer.'
+ // );
+
+ // Same as above, but issuing a 3-hour ban instead of just reject the post.
+ // $config['filters'][] = array(
+ // 'condition' => array(
+ // 'name' => '/^surgeon$/',
+ // 'body' => '/regards,\s+(the )?surgeon$/i',
+ // 'OP' => false
+ // ),
+ // 'action' => 'ban',
+ // 'expires' => 60 * 60 * 3, // 3 hours
+ // 'reason' => 'Go away, spammer.'
+ // );
+
+ // PHP 5.3+ (anonymous functions)
+ // There is also a "custom" condition, making the possibilities of this feature pretty much endless.
+ // This is a bad example, because there is already a "name" condition built-in.
+ // $config['filters'][] = array(
+ // 'condition' => array(
+ // 'body' => '/h$/i',
+ // 'OP' => false,
+ // 'custom' => function($post) {
+ // if($post['name'] == 'Anonymous')
+ // return true;
+ // else
+ // return false;
+ // }
+ // ),
+ // 'action' => 'reject'
+ // );
+
+ // Filter flood prevention conditions ("flood-match") depend on a table which contains a cache of recent
+ // posts across all boards. This table is automatically purged of older posts, determining the maximum
+ // "age" by looking at each filter. However, when determining the maximum age, Tinyboard does not look
+ // outside the current board. This means that if you have a special flood condition for a specific board
+ // (contained in a board configuration file) which has a flood-time greater than any of those in the
+ // global configuration, you need to set the following variable to the maximum flood-time condition value.
+ // $config['flood_cache'] = 60 * 60 * 24; // 24 hours
+
/*
* ====================
* Post settings
@@ -401,57 +506,6 @@
// Require users to see the ban page at least once for a ban even if it has since expired.
$config['require_ban_view'] = true;
- /*
- * Custom filters detect certain posts and reject/ban accordingly. They are made up of a
- * condition and an action (for when ALL conditions are met). As every single post has to
- * be put through each filter, having hundreds probably isn’t ideal as it could slow things down.
- *
- * Read more: http://tinyboard.org/docs/index.php?p=Config/Filters
- *
- * This used to be named $config['flood_filters'] (still exists as an alias).
- */
-
- // An example of blocking an imaginary known spammer, who keeps posting a reply with the name "surgeon",
- // ending his posts with "regards, the surgeon" or similar.
- // $config['filters'][] = array(
- // 'condition' => array(
- // 'name' => '/^surgeon$/',
- // 'body' => '/regards,\s+(the )?surgeon$/i',
- // 'OP' => false
- // ),
- // 'action' => 'reject',
- // 'message' => 'Go away, spammer.'
- // );
-
- // Same as above, but issuing a 3-hour ban instead of just reject the post.
- // $config['filters'][] = array(
- // 'condition' => array(
- // 'name' => '/^surgeon$/',
- // 'body' => '/regards,\s+(the )?surgeon$/i',
- // 'OP' => false
- // ),
- // 'action' => 'ban',
- // 'expires' => 60 * 60 * 3, // 3 hours
- // 'reason' => 'Go away, spammer.'
- // );
-
- // PHP 5.3+ (anonymous functions)
- // There is also a "custom" condition, making the possibilities of this feature pretty much endless.
- // This is a bad example, because there is already a "name" condition built-in.
- // $config['filters'][] = array(
- // 'condition' => array(
- // 'body' => '/h$/i',
- // 'OP' => false,
- // 'custom' => function($post) {
- // if($post['name'] == 'Anonymous')
- // return true;
- // else
- // return false;
- // }
- // ),
- // 'action' => 'reject'
- // );
-
/*
* ====================
* Markup settings
@@ -593,10 +647,6 @@
// that as a thumbnail instead of resizing/redrawing.
$config['minimum_copy_resize'] = false;
- // Image hashing function. There's really no reason to change this.
- // sha1_file, md5_file, etc. You can also define your own similar function.
- $config['file_hash'] = 'sha1_file';
-
// Maximum image upload size in bytes.
$config['max_filesize'] = 10 * 1024 * 1024; // 10MB
// Maximum image dimensions.
@@ -1156,7 +1206,8 @@
// Post bypass unoriginal content check on robot-enabled boards
$config['mod']['postunoriginal'] = ADMIN;
// Bypass flood check
- $config['mod']['flood'] = ADMIN;
+ $config['mod']['bypass_filters'] = ADMIN;
+ $config['mod']['flood'] = &$config['mod']['bypass_filters'];
// Raw HTML posting
$config['mod']['rawhtml'] = ADMIN;