Skip to content

Commit 2aff270

Browse files
committed
Added visa-card-regex removal from all strings
1 parent 1f0ee4b commit 2aff270

3 files changed

Lines changed: 50 additions & 28 deletions

File tree

lib/net/authorize/util/ANetSensitiveFields.php

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,18 @@
55

66
class ANetSensitiveFields
77
{
8-
private static function getDefaulSensitiveXmlTags(){
9-
// return array( //format for each element: array(tag name, regex-pattern, regex-replacement)
10-
// array("tagName" => "cardCode","pattern" => "","replacement" => "","disableMask"=>false),
11-
// array("tagName" => "cardNumber","pattern" => "([^0-9]*)(\d+)(\d{4})(.*)","replacement" => "$1xxxx-$3$4","disableMask"=>false),
12-
// array("tagName" => "expirationDate","pattern" => "","replacement" => "","disableMask"=>false)
13-
// );
14-
return array( //format for each element: array(tag name, regex-pattern, regex-replacement)
15-
new SensitiveTag("cardCode"),
16-
new SensitiveTag("cardNumber","(\d+)(\d{4})","$1xxxx-$3$4",false),
17-
new SensitiveTag("expirationDate")
18-
);
19-
}
20-
public static function getSensitiveXmlTags(){
21-
$sensitiveTags = array();
8+
private static $sensitiveTags = NULL;
9+
private static $sensitiveStringRegexes = NULL;
10+
11+
private static function fetchFromConfigFiles(){
2212
$configFilePath = dirname(__FILE__) . "/" . ANET_SENSITIVE_XMLTAGS_JSON_FILE;
2313
$userConfigFile = ANET_SENSITIVE_XMLTAGS_JSON_FILE;
2414
$presentUserConfigFile = file_exists($userConfigFile);
2515
if ($presentUserConfigFile) { //client config for tags
2616
//read list of tags(and associate regex-patterns and replacements) from .json file
2717
$jsonFileObejct = json_decode(file_get_contents($userConfigFile));
28-
$sensitiveTags = $jsonFileObejct["sensitiveTags"];
18+
self::$sensitiveTags = $jsonFileObejct->sensitiveTags;
19+
self::$sensitiveStringRegexes = $jsonFileObejct->sensitiveStringRegexes;
2920
if (json_last_error() === JSON_ERROR_NONE) {// JSON is valid
3021
}
3122
else{
@@ -38,22 +29,25 @@ public static function getSensitiveXmlTags(){
3829
exit("ERROR: No config file: " . $configFilePath);
3930
}
4031
$jsonFileObejct = json_decode(file_get_contents($configFilePath));
41-
$sensitiveTags = $jsonFileObejct->sensitiveTags;
32+
self::$sensitiveTags = $jsonFileObejct->sensitiveTags;
33+
self::$sensitiveStringRegexes = $jsonFileObejct->sensitiveStringRegexes;
4234
if (json_last_error() === JSON_ERROR_NONE) {
4335
}
4436
else{
4537
exit("ERROR: Invalid json in: " . $configFilePath . " json_last_error_msg : " . json_last_error_msg());
4638
}
4739
}
48-
//Check for disableMask flag in case of client json.
49-
$applySensitiveTags = array();
50-
foreach($sensitiveTags as $sensitiveTag){
51-
if($sensitiveTag->disableMask){
52-
//skip masking continue;
53-
}
54-
else{
55-
array_push($applySensitiveTags,$sensitiveTag);
56-
} }
57-
return $applySensitiveTags;
40+
}
41+
public static function getSensitiveStringRegexes(){
42+
if(NULL == self::$sensitiveStringRegexes) {
43+
self::fetchFromConfigFiles();
44+
}
45+
return self::$sensitiveStringRegexes;
46+
}
47+
public static function getSensitiveXmlTags(){
48+
if(NULL == self::$sensitiveTags) {
49+
self::fetchFromConfigFiles();
50+
}
51+
return self::$sensitiveTags;
5852
}
5953
}

lib/net/authorize/util/AuthorizedNetSensitiveTagsConfig.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
"replacement": "",
1919
"disableMask": false
2020
}
21+
],
22+
"sensitiveStringRegexes": [
23+
"4\\d{3}([\\ \\-]?)\\d{4}\\1\\d{4}\\1\\d{4}",
24+
"4\\d{3}([\\ \\-]?)(?:\\d{4}\\1){2}\\d(?:\\d{3})?"
2125
]
2226
}
2327

lib/net/authorize/util/Log.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,28 @@ private function maskSensitiveXmlString($rawString){
6464
return $maskedString;
6565
}
6666

67-
/**
67+
/**
68+
* Takes a string and masks credit card regex matching parts.
69+
*
70+
* @param string $rawString The string.
71+
*
72+
* @return string The string after masking credit card regex matching parts.
73+
*/
74+
private function maskCreditCards($rawString){
75+
$patterns=array();
76+
$replacements=array();
77+
78+
foreach ($this->sensitiveStringRegexes as $i => $creditCardRegex){
79+
$pattern = "/" . $creditCardRegex . "/";
80+
81+
$replacement = "xxxx";
82+
$patterns [$i] = $pattern;
83+
$replacements[$i] = $replacement;
84+
}
85+
$maskedString = preg_replace($patterns, $replacements, $rawString);
86+
echo "maskedString: $maskedString\n";
87+
return $maskedString;
88+
}/**
6889
* Object data masking related functions START
6990
*/
7091

@@ -186,7 +207,9 @@ private function getMasked($raw)
186207
$messageType = gettype($raw);
187208
$message="";
188209
if ($messageType == "string") {
189-
$message = $this->maskSensitiveXmlString($raw);
210+
$maskedXml = $this->maskSensitiveXmlString($raw);
211+
//mask credit card numbers
212+
$message = $this->maskCreditCards($maskedXml);
190213
}
191214
else if($messageType == "object"){
192215
$obj = unserialize(serialize($raw)); // deep copying the object
@@ -281,6 +304,7 @@ public function errorFormat($format, $args=array(), $flags=FILE_APPEND){
281304

282305
public function __construct(){
283306
$this->sensitiveXmlTags = ANetSensitiveFields::getSensitiveXmlTags();
307+
$this->sensitiveStringRegexes = ANetSensitiveFields::getSensitiveStringRegexes();
284308
}
285309
}
286310
?>

0 commit comments

Comments
 (0)