Anonymization
Overview
The Anonymizer Library is a Node.js module designed to anonymize sensitive information in various types of data, including JSON objects, URL-encoded strings, HTML content, and multipart form data. The library supports different types of data formats and allows customization of anonymization rules to suit specific needs.
File Involved
anonymizer.js
anonymizerConfig.js
main.js
Features
- Email Anonymization: Replaces email addresses with a generic anonymized email.
- Name Anonymization: Supports full name and single name anonymization.
- Address Anonymization: Replaces street addresses, city names, and other location-specific details with anonymized placeholders.
- Phone Number Anonymization: Replaces phone numbers with a generic anonymized number.
- URL Anonymization: Replaces URLs with a generic anonymized URL.
- State and ZIP Code Anonymization: Replaces state abbreviations and ZIP codes with generic placeholders.
- Password Anonymization: Replaces passwords with a generic anonymized password.
- HTML Content Anonymization: Anonymizes HTML content, including headers, paragraphs, and links.
- Form Data Anonymization: Supports anonymization of multipart form data.
- Custom Anonymization Rules: Allows users to define custom regex patterns and replacements for specific anonymization needs.
Structure
anonymizer.js
│
├── Dependencies
│ ├── multiparty
│ ├── cheerio
│ ├── fs
│ ├── path
│
├── Regular Expressions
│ ├── emailRegex
│ ├── fullNameRegex
│ ├── singleNameRegex
│ ├── addressRegex
│ ├── phoneRegex
│ ├── urlRegex
│ ├── stateRegex
│ ├── zipRegex
│ ├── passwordRegex
│
├── Variables
│ ├── anonymizationEnabled (boolean)
│ ├── manualMode (boolean) //Important Config file for manual mode
│ ├── customAnonymizationRules //Important Config file for manual mode
│
├── Functions
│ ├── anonymizeEmail(text) // email
│ ├── anonymizeFullName(text) // full name
│ ├── anonymizeSingleName(text) // single name
│ ├── anonymizeAddress(text) // address
│ ├── anonymizePhone(text) // number
│ ├── anonymizeUrl(text) //string in url
│ ├── anonymizeState(text) //state
│ ├── anonymizeZip(text) //zip
│ ├── anonymizePassword(text) //password
│ ├── applyManual(text, rules) // config driven
│ ├── anonymizeText(text) // string
│ ├── anonymizeUrlEncoded(data) //url
│ ├── anonymizeObject(obj) // obj
│ ├── anonymizeField(key, value) // address(full)
│ ├── anonymizeHtml(htmlContent) // html
│ ├── anonymizeFormData(req, callback) // form
│ ├── anonymizeRequest(options) // https req
│ ├── anonymizeResponse(response, cb) // https res
│ ├── setAnonymization(flag) // flag setter
│ ├── isAnonymizationEnabled() // flag check
│
└── Module Exports
├── anonymizeRequest
├── anonymizeResponse
├── anonymizeObject
├── anonymizeFormData
├── isAnonymizationEnabled
└── setAnonymization
Installation
To use the Anonymizer Library in your Node.js project, you can set anonymization mode into true, no install need for anonymization feature.
//default
let anonymizationEnabled = true;
Usage
Enabling/Disabling Anonymization
The anonymization process can be enabled or disabled using the following functions:
Standalone Script:
When you creating your script utilizing Flexbench, by importing flexbench, set the anonymization feature via core library
const trafficSimulator = require('flexbench');
// Enable anonymization
trafficSimulator.setAnonymization(true);
// Check if anonymization is enabled
console.log(trafficSimulator.isAnonymizationEnabled()); // true
Server-app:
Go to server-app/tests/
Add code below to both multi-requests.js & simple-request.js
// Enable anonymization
trafficSimulator.setAnonymization(true);
//above start
trafficSimulator.start(threadId);
desktop-app:
Go to desktop-app/tests/
Add code below to both multi-requests.js & simple-request.js
// Enable anonymization
trafficSimulator.setAnonymization(true);
//above start
trafficSimulator.start(threadId);
Anonymizing Different Data Formats
Anonymizing Text
To anonymize a plain text string:
const anonymizedText = anonymizer.anonymizeText("Yujun Liu lives at 123 Main St.");
console.log(anonymizedText); // Anonymized Name lives at Anonymized Address.
Anonymizing URL-encoded Strings
To anonymize a URL-encoded string:
const urlEncodedData = "email.YJ@example.com&name=Yujun+Liu";
const anonymizedData = anonymizer.anonymizeUrlEncoded(urlEncodedData);
console.log(anonymizedData); // email=anonymized_email@example.com&name=Anonymized+Name
Anonymizing JSON Objects
To anonymize a JSON object:
const jsonObject = {
name: "Yujun Liu",
email: "YJ@example.com",
address: "22 bond St, Anytown, USA"
};
const anonymizedObject = anonymizer.anonymizeObject(jsonObject);
console.log(anonymizedObject);
// { name: 'Anonymized Name', email: 'anonymized_email@example.com', address: 'Anonymized Address' }
Anonymizing HTML Content
To anonymize HTML content:
const htmlContent = '<h1>Yujun Liu</h1><p>Email: YujunLiu@example.com</p>';
const anonymizedHtml = anonymizer.anonymizeHtml(htmlContent);
console.log(anonymizedHtml);
// <h1>Anonymized Title</h1><p>Email: anonymized_email@example.com</p>
Anonymizing Multipart Form Data
To anonymize multipart form data:
const req = {}; // your HTTP request object
anonymizer.anonymizeFormData(req, (err, anonymizedData) => {
if (err) {
console.error('Error anonymizing form data:', err);
} else {
console.log('Anonymized form data:', anonymizedData);
}
});
Anonymizing HTTP Requests and Responses
Anonymizing HTTP Requests
To anonymize an HTTP request before sending it:
const options = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Yujun Liu', email: 'YujunLiu@example.com' })
};
const anonymizedRequestOptions = anonymizer.anonymizeRequest(options);
Anonymizing HTTP Responses
To anonymize an HTTP response after receiving it:
const response = {}; // your HTTP response object
const anonymizedResponse = anonymizer.anonymizeResponse(response, (anonymizedResponse) => {
console.log('Anonymized response:', anonymizedResponse);
});
Configuration(Manual Mode)
The library is designed to work with a configuration file (e.g., anonymizerConfig.json
) where custom anonymization rules can be specified. The configuration can include:
- Custom regex patterns for anonymization
- Replacement values for specific fields
- Manual mode for applying specific rules
Error Handling
The library includes error handling to catch and report issues during the anonymization process. Errors are logged to the console, and the original data is returned if anonymization fails.
License
This project is licensed under the MIT License. See the LICENSE
file for details.