Skip to content

fix: string masking and redaction#477

Open
arunmish-visa wants to merge 7 commits into
AuthorizeNet:masterfrom
arunmish-visa:feature/security-enhancements
Open

fix: string masking and redaction#477
arunmish-visa wants to merge 7 commits into
AuthorizeNet:masterfrom
arunmish-visa:feature/security-enhancements

Conversation

@arunmish-visa

Copy link
Copy Markdown
Contributor

No description provided.

…w body logging

Critical fixes for AISAST-10703:

1. Log.php - addDelimiterFwdSlash(): Add 's' (dotall) flag so sensitive values
   spanning newlines are matched by XML regex patterns.

2. Log.php - NEW maskSensitiveJsonString(): Add JSON-key-aware masking that
   handles the actual wire format (json_encode) used by ApiOperationBase.
   Masks cardNumber, cardCode, transactionKey, expirationDate, accountNumber,
   and nameOnAccount in JSON payloads using key-value regex patterns.

3. Log.php - getMasked(): Chain maskSensitiveJsonString() after XML masking
   so both formats are covered before credit card regex runs.

4. HttpClient.php line 77: Remove raw request body logging; log only
   payload length (payloadLength=N).

5. HttpClient.php line 96: Remove raw response body logging; log only
   HTTP status code and response length.

6. Add comprehensive PHPUnit tests (LogMaskingTest.php) covering:
   - JSON key masking for all sensitive fields
   - Multiple occurrences of same sensitive tag
   - Multi-line XML values (dotall coverage)
   - Credit card regex in freetext
   - Combined JSON + freetext scenarios
   - Edge cases (empty string, non-sensitive preservation)

Addresses: PCI A3.2.6, KC 7.10.9, security-logging-dsr 11.2
…atterns

- Remove user-controlled CWD-relative config file path; only load the
  SDK-bundled config via absolute path (dirname(__FILE__) prefix)
- Validate all regex patterns from config with preg_match before use;
  discard invalid patterns to prevent ReDoS
- Validate sensitiveStringRegexes array entries the same way
…PCRE null-check, fix backreference

- AuthorizedNetSensitiveTagsConfig.json: Add password, sessionToken,
  fingerPrint, clientKey, accessToken, mobileDeviceId to sensitiveTags
  so they are masked on the object-reflection log path at
  ApiOperationBase.php:115
- Log.php maskCreditCards(): Add PCRE null-check (fail-closed) for
  consistency with XML and JSON maskers
- Log.php maskSensitiveJsonString(): Remove dangling $2 backreference;
  JSON masker always uses static 'xxxx' replacement (the config
  replacement 'xxxx-$2' is XML-specific with 2 capture groups)
- LogMaskingTest.php: Add 10 object-reflection masking tests covering
  all 6 new credential fields, nested objects, and non-sensitive
  field preservation
AISAST-b84e1cc7: Insecure default HTTP endpoint allows cleartext
credential transmission.

- ANetEnvironment.php: Change CUSTOM constant from http:// to https://
  (was 'http://wwww.myendpoint.com', now 'https://custom.endpoint.example')
- HttpClient.php _sendRequest(): Add HTTPS scheme enforcement — rejects
  any non-TLS URL before opening connection (PCI DSS 4.1)
- HttpClient.php _sendRequest(): Explicitly set CURLOPT_SSL_VERIFYPEER=true
  rather than relying on libcurl default which may vary by build
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant