Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Becker <fabian.becker@uni-tuebingen.de>2013-09-03 15:40:03 +0400
committerFabian Becker <fabian.becker@uni-tuebingen.de>2013-09-03 15:40:03 +0400
commitc072a0e5911b544890a39e86c9efe024bb247577 (patch)
treebc2d7105ea6dbf52514ae477caf4ce809dbb745b /plugins/AnonymizeIP
parent1e313cdda164281cdf175fdf9fdc1251ae7e1a31 (diff)
Extend AnonymizeIP to properly mask IPv6 addresses.
maskLength is now interpreted as "mask level" (0-4) and determines the number of bits to be masked. Level IPv4 IPv6 0 0 0 1 8 64 2 16 80 3 24 104 4 32 n/a fixes #3710
Diffstat (limited to 'plugins/AnonymizeIP')
-rw-r--r--plugins/AnonymizeIP/AnonymizeIP.php29
1 files changed, 20 insertions, 9 deletions
diff --git a/plugins/AnonymizeIP/AnonymizeIP.php b/plugins/AnonymizeIP/AnonymizeIP.php
index ba0e2c2230..d3c707bddc 100644
--- a/plugins/AnonymizeIP/AnonymizeIP.php
+++ b/plugins/AnonymizeIP/AnonymizeIP.php
@@ -12,6 +12,7 @@ namespace Piwik\Plugins\AnonymizeIP;
use Piwik\Config;
use Piwik\Common;
+use Piwik\IP;
use Piwik\Version;
/**
@@ -51,22 +52,32 @@ class AnonymizeIP extends \Piwik\Plugin
* @param int $maskLength Number of octets to reset
* @return string
*/
- static public function applyIPMask($ip, $maskLength)
+ public static function applyIPMask($ip, $maskLength)
{
- $i = Common::strlen($ip);
- if ($maskLength > $i) {
- $maskLength = $i;
- }
+ // IPv4 or mapped IPv4 in IPv6
+ if(IP::isIPv4($ip)) {
+ $i = Common::strlen($ip);
+ if ($maskLength > $i) {
+ $maskLength = $i;
+ }
- while ($maskLength-- > 0) {
- $ip[--$i] = chr(0);
+ while ($maskLength-- > 0) {
+ $ip[--$i] = chr(0);
+ }
+ } else {
+ $masks = array(
+ 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+ 'ffff:ffff:ffff:ffff::',
+ 'ffff:ffff:ffff:0000::',
+ 'ffff:ff00:0000:0000::'
+ );
+ return $ip & current(unpack('a16', inet_pton($masks[$maskLength])));
}
-
return $ip;
}
/**
- * Hook on Tracker.Visit.setVisitorIp to anonymize visitor IP addresses
+ * Hook on Tracker.Visit.setVisitorIp to anomymize visitor IP addresses
*/
public function setVisitorIpAddress(&$ip)
{