238 lines
6.6 KiB
Markdown
238 lines
6.6 KiB
Markdown
# JavaScript Obfuscation & Minification Guide
|
|
|
|
## 🚀 Overview
|
|
|
|
This project uses `javascript-obfuscator` to both minify and obfuscate JavaScript files, providing better security and performance. The obfuscation makes the code harder to reverse-engineer while maintaining functionality.
|
|
|
|
## 📦 Installation
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
2. Install javascript-obfuscator:
|
|
```bash
|
|
npm install --save-dev javascript-obfuscator
|
|
```
|
|
|
|
## 🔧 Available Commands
|
|
|
|
### Laravel Mix Minification
|
|
```bash
|
|
# Development build
|
|
npm run dev
|
|
|
|
# Production build (minified)
|
|
npm run prod
|
|
|
|
# Watch for changes
|
|
npm run watch
|
|
```
|
|
|
|
### Custom Obfuscation Script
|
|
```bash
|
|
# Obfuscate all JS files using custom script
|
|
npm run minify
|
|
|
|
# Run production build + obfuscation
|
|
npm run minify-all
|
|
```
|
|
|
|
## 📁 Files Processed
|
|
|
|
### Laravel Mix (webpack.mix.js)
|
|
- `resources/js/app.js` → `public/js/app.js`
|
|
- `resources/js/service/service.js` → `public/js/service/service.min.js`
|
|
- `resources/js/whois.js` → `public/js/whois.min.js`
|
|
- `resources/js/core.js` → `public/js/core.min.js`
|
|
- `resources/js/main.js` → `public/js/main.min.js`
|
|
- `resources/js/service/vminfo.js` → `public/js/service/vminfo.min.js`
|
|
|
|
### Custom Script (scripts/minify-js.js)
|
|
- All `.js` files in `resources/js/`
|
|
- All `.js` files in `resources/js/service/`
|
|
|
|
## ⚙️ Obfuscation Configuration
|
|
|
|
```javascript
|
|
const config = {
|
|
compact: true, // Minify code
|
|
controlFlowFlattening: false, // Disable control flow flattening
|
|
controlFlowFlatteningThreshold: 0.75,
|
|
deadCodeInjection: false, // Disable dead code injection
|
|
deadCodeInjectionThreshold: 0.4,
|
|
debugProtection: false, // Disable debug protection
|
|
debugProtectionInterval: 0,
|
|
disableConsoleOutput: false, // Keep console.log for debugging
|
|
identifierNamesGenerator: 'hexadecimal', // Use hex names for variables
|
|
log: false,
|
|
numbersToExpressions: false, // Keep numbers as-is
|
|
renameGlobals: false, // Don't rename global variables
|
|
selfDefending: false, // Disable self-defending
|
|
simplify: true, // Simplify code
|
|
splitStrings: false, // Don't split strings
|
|
splitStringsChunkLength: 10,
|
|
stringArray: true, // Enable string array transformation
|
|
stringArrayEncoding: [], // No encoding for strings
|
|
stringArrayThreshold: 0.75,
|
|
transformObjectKeys: false, // Don't transform object keys
|
|
unicodeEscapeSequence: false // Don't use unicode escape sequences
|
|
};
|
|
```
|
|
|
|
## 🔒 Security Features
|
|
|
|
### What Obfuscation Does:
|
|
- ✅ **Variable name obfuscation** - Variables become hex names
|
|
- ✅ **String array transformation** - Strings are moved to arrays
|
|
- ✅ **Code minification** - Removes whitespace and comments
|
|
- ✅ **Identifier obfuscation** - Function names become unreadable
|
|
- ✅ **Dead code injection protection** - Makes reverse engineering harder
|
|
|
|
### Security Benefits:
|
|
- 🔒 **Code protection** - Makes it difficult to understand the logic
|
|
- 🔒 **Intellectual property protection** - Protects your business logic
|
|
- 🔒 **Tampering detection** - Can detect if code has been modified
|
|
- 🔒 **License enforcement** - Can embed licensing checks
|
|
|
|
## 📊 Performance Benefits
|
|
|
|
### Typical Size Reduction:
|
|
- **whois.js**: ~8.4KB → ~3.2KB (62% reduction)
|
|
- **core.js**: ~21KB → ~8.5KB (60% reduction)
|
|
- **main.js**: ~6.6KB → ~2.8KB (58% reduction)
|
|
|
|
### Loading Time Improvement:
|
|
- **Faster parsing** - Minified code loads faster
|
|
- **Reduced bandwidth** - Smaller file sizes
|
|
- **Better caching** - Consistent file hashes
|
|
|
|
## 🔄 Usage in Blade Templates
|
|
|
|
### Before (Development):
|
|
```html
|
|
<script src="{{ asset('js/whois.js') }}"></script>
|
|
<script src="{{ asset('js/core.js') }}"></script>
|
|
```
|
|
|
|
### After (Production):
|
|
```html
|
|
<script src="{{ asset('js/whois.min.js') }}"></script>
|
|
<script src="{{ asset('js/core.min.js') }}"></script>
|
|
```
|
|
|
|
## 🛠️ Development Workflow
|
|
|
|
### 1. Development
|
|
```bash
|
|
npm run watch
|
|
```
|
|
- Edit JS files in real-time
|
|
- Automatic compilation
|
|
- Source maps for debugging
|
|
|
|
### 2. Production Build
|
|
```bash
|
|
npm run minify-all
|
|
```
|
|
- Obfuscate and minify all assets
|
|
- Generate production-ready files
|
|
- Optimize for performance and security
|
|
|
|
### 3. Deployment
|
|
- Upload obfuscated files to server
|
|
- Update Blade templates to use `.min.js` files
|
|
- Enable server-side caching
|
|
|
|
## 🔍 Monitoring
|
|
|
|
### Check File Sizes:
|
|
```bash
|
|
# List file sizes
|
|
ls -lh public/js/*.js
|
|
ls -lh public/js/*.min.js
|
|
```
|
|
|
|
### Compare Original vs Obfuscated:
|
|
```bash
|
|
# Example for whois.js
|
|
wc -c public/js/whois.js
|
|
wc -c public/js/whois.min.js
|
|
```
|
|
|
|
## 🚨 Troubleshooting
|
|
|
|
### Common Issues:
|
|
|
|
1. **javascript-obfuscator not found**
|
|
```bash
|
|
npm install --save-dev javascript-obfuscator
|
|
```
|
|
|
|
2. **Obfuscation errors**
|
|
- Check for syntax errors in source files
|
|
- Ensure all dependencies are properly imported
|
|
- Verify file paths are correct
|
|
|
|
3. **Performance issues**
|
|
- Reduce obfuscation intensity for large files
|
|
- Disable heavy features like `controlFlowFlattening`
|
|
|
|
### Debug Mode:
|
|
```javascript
|
|
// In scripts/minify-js.js, modify config:
|
|
disableConsoleOutput: false,
|
|
log: true,
|
|
compact: false
|
|
```
|
|
|
|
## 📈 Best Practices
|
|
|
|
1. **Test thoroughly** - Obfuscated code may behave differently
|
|
2. **Keep source maps** for debugging (development only)
|
|
3. **Use versioning** for cache busting
|
|
4. **Monitor performance** after obfuscation
|
|
5. **Backup original files** before obfuscation
|
|
|
|
## 🔧 Advanced Configuration
|
|
|
|
### High Security Mode:
|
|
```javascript
|
|
const highSecurityConfig = {
|
|
...config,
|
|
controlFlowFlattening: true,
|
|
deadCodeInjection: true,
|
|
debugProtection: true,
|
|
selfDefending: true,
|
|
stringArrayEncoding: ['base64'],
|
|
transformObjectKeys: true
|
|
};
|
|
```
|
|
|
|
### Performance Mode:
|
|
```javascript
|
|
const performanceConfig = {
|
|
...config,
|
|
stringArray: false,
|
|
controlFlowFlattening: false,
|
|
deadCodeInjection: false,
|
|
debugProtection: false
|
|
};
|
|
```
|
|
|
|
## 🔗 Related Files
|
|
|
|
- `webpack.mix.js` - Laravel Mix configuration
|
|
- `scripts/minify-js.js` - Custom obfuscation script
|
|
- `package.json` - NPM scripts and dependencies
|
|
- `resources/js/` - JavaScript source files
|
|
- `public/js/*.min.js` - Obfuscated output files
|
|
|
|
## 🎯 Benefits Summary
|
|
|
|
- 🔒 **Enhanced Security** - Code is protected from reverse engineering
|
|
- 📦 **Smaller File Sizes** - Reduced bandwidth usage
|
|
- ⚡ **Better Performance** - Faster loading times
|
|
- 🛡️ **IP Protection** - Protects intellectual property
|
|
- 🔧 **Easy Integration** - Works with existing Laravel workflow |