关联漏洞
标题:
jQuery 跨站脚本漏洞
(CVE-2022-31160)
描述:jQuery是美国John Resig个人开发者的一套开源、跨浏览器的JavaScript库。该库简化了HTML与JavaScript之间的操作,并具有模块化、插件扩展等特点。 jQuery UI 1.13.2 之前版本存在跨站脚本漏洞,该漏洞源于容易受到跨站点脚本的攻击。
描述
jquery XSS Proof of Concept (PoC)
介绍
# jQuery UI CVE-2022-31160 Vulnerability Demonstration




This project demonstrates the **jQuery UI Checkboxradio Widget Refresh Vulnerability (CVE-2022-31160)**, which allows HTML entity decoding during widget refresh operations, potentially leading to Cross-Site Scripting (XSS) attacks.
## 🚨 Security Warning
**⚠️ This project contains working XSS payloads for educational and research purposes only.**
- **Do NOT use on production systems**
- **Only use in controlled environments**
- **Intended for security research and education**
## 📋 Table of Contents
- [Vulnerability Overview](#vulnerability-overview)
- [Quick Start](#quick-start)
- [Project Structure](#project-structure)
- [Demonstrations](#demonstrations)
- [Technical Details](#technical-details)
- [Docker Usage](#docker-usage)
- [Security Analysis](#security-analysis)
- [Mitigation](#mitigation)
- [Contributing](#contributing)
## 🔍 Vulnerability Overview
### CVE-2022-31160 Details
- **Component**: jQuery UI Checkboxradio Widget
- **Affected Versions**: jQuery UI ≤ 1.13.1
- **Vulnerability Type**: Cross-Site Scripting (XSS) via HTML Entity Decoding
- **CVSS Score**: 6.1 (Medium)
- **First Published**: July 20, 2022
### Root Cause
When a checkboxradio widget is initialized on an input enclosed within a label, calling `.checkboxradio("refresh")` on the widget causes HTML entities in the label content to be erroneously decoded. This can convert safely encoded malicious content into executable JavaScript.
### Attack Vector
```html
<!-- Safe encoded content -->
<label for="checkbox">
Text <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
<!-- After .checkboxradio("refresh") -->
<label for="checkbox">
Text <img src=x onerror="alert('XSS')">
<input type="checkbox" id="checkbox">
</label>
```
## 🚀 Quick Start
### Prerequisites
- Docker installed on your system
- Web browser with developer tools
- Basic understanding of web security concepts
### Build and Run
```bash
# Clone or navigate to the project directory
cd jquery-cve-2022-31160
# Build the Docker image
docker build -t jquery-cve-2022-31160 .
# Run the container
docker run -p 3000:3000 jquery-cve-2022-31160
```
### Access the Demonstrations
Once the container is running, access:
- **Simplified Survey Demo**: http://localhost:3000/survey
- **Alternative Survey URL**: http://localhost:3000/simplified-survey
## 📁 Project Structure
```
jquery-cve-2022-31160/
├── README.md # This documentation
├── Dockerfile # Docker container configuration
├── package.json # Node.js dependencies
├── server.js # Express.js server
└── simplified-survey.html # Survey-style demonstration
```
## 🎯 Demonstrations
### 1. Simplified Survey Demo (`simplified-survey.html`)
**URL**: http://localhost:3000/survey
- Survey-style interface
- Multiple vulnerability scenarios
- Enhanced visual feedback
**Features**:
- 4 different checkbox options demonstrating various scenarios:
- **Safe Option**: No encoded entities (control group)
- **Network Security XSS**: `<img src=x onerror="...">` - Immediate execution
- **Mobile Security XSS**: `<details ontoggle="..." open>` - Immediate execution
- **Cloud Security XSS**: `<span onmouseover="...">` - Interactive execution
**Analysis Tools**:
- Detailed console logging
- XSS execution alerts
- Step-by-step vulnerability tracking
## 🔧 Technical Details
### Vulnerability Mechanism
1. **Widget Initialization**: jQuery UI creates checkboxradio widget
2. **HTML Entity Storage**: Label content with encoded entities is processed
3. **Refresh Trigger**: `.checkboxradio("refresh")` is called
4. **Entity Decoding**: jQuery UI erroneously decodes HTML entities
5. **XSS Execution**: Decoded malicious content becomes executable
### Affected Code Path
```javascript
// Vulnerable operation
$('#vulnerable-checkbox').checkboxradio();
$('#vulnerable-checkbox').checkboxradio("refresh"); // Triggers vulnerability
```
### Test Payloads
The demonstrations include various payloads to test different XSS execution methods:
```html
<!-- Network Security: Error event XSS (Immediate execution) -->
<img src=x onerror="console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');">
<!-- Mobile Security: Details toggle XSS (Immediate execution) -->
<details ontoggle="alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')" open><summary></summary></details>
<!-- Cloud Security: Interactive XSS (User interaction required) -->
<span onmouseover="alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')" style="text-decoration:underline; cursor:pointer;">[Hover to trigger]</span>
```
### XSS Execution Methods
#### 1. Error Event Handler (`onerror`)
- **Trigger**: Immediate when element is inserted into DOM
- **Reliability**: Very high (always fails with `src=x`)
- **Use Case**: Demonstrates immediate XSS execution
- **Real-World Risk**: High - commonly bypasses input filters
#### 2. Details Toggle Event Handler (`ontoggle`)
- **Trigger**: When details element open/close state changes
- **Reliability**: Very high (guaranteed trigger with `open` attribute)
- **Use Case**: Immediate execution on DOM insertion
- **Real-World Risk**: High - reliable cross-browser execution
#### 3. Mouse Event Handler (`onmouseover`)
- **Trigger**: Requires user interaction (hover)
- **Reliability**: High when user interacts
- **Use Case**: Social engineering scenarios
- **Real-World Risk**: Medium - requires user engagement
### Why These Payloads Work
**Event Handler Advantages:**
- Execute when element is inserted via `innerHTML`
- Bypass `<script>` tag restrictions
- Work across different browsers consistently
- Don't require external resources to load
- State-based triggers (like `ontoggle`) are highly reliable
**Encoding Bypass:**
- HTML entities (`<`, `"`) get decoded by jQuery UI refresh
- Transforms safe encoded content into executable code
- Demonstrates real-world sanitization bypass
- Multiple execution vectors show attack surface diversity
## 🐳 Docker Usage
### Building the Image
```bash
docker build -t jquery-cve-2022-31160 .
```
### Running the Container
```bash
# Run on default port 3000
docker run -p 3000:3000 jquery-cve-2022-31160
# Run on custom port
docker run -p 8080:3000 jquery-cve-2022-31160
# Run in background
docker run -d -p 3000:3000 jquery-cve-2022-31160
# Run with custom name
docker run --name jquery-xss-demo -p 3000:3000 jquery-cve-2022-31160
```
### Container Management
```bash
# List running containers
docker ps
# Stop the container
docker stop jquery-cve-2022-31160
# Remove the container
docker rm jquery-cve-2022-31160
# Remove the image
docker rmi jquery-cve-2022-31160
```
## 🔬 Security Analysis
### Impact Assessment
- **Severity**: Medium (CVSS 6.1)
- **Attack Complexity**: Low
- **User Interaction**: Required (page interaction)
- **Scope**: Unchanged (same-origin)
- **Confidentiality**: Low impact
- **Integrity**: Low impact
- **Availability**: None
### Real-World Scenarios
This vulnerability can be exploited in applications that:
1. Use jQuery UI checkboxradio widgets
2. Allow user-generated content in labels
3. Sanitize content using HTML entity encoding
4. Programmatically refresh widgets
### Detection Methods
- **Static Analysis**: Search for `.checkboxradio("refresh")` calls
- **Dynamic Analysis**: Monitor HTML content changes during widget operations
- **Automated Scanning**: Use tools that can detect DOM-based XSS
- **Manual Testing**: Test widget refresh with encoded payloads
## 🛡️ Mitigation
### Immediate Actions
1. **Update jQuery UI**: Upgrade to version 1.13.2 or later
2. **Input Validation**: Implement proper server-side validation
3. **Content Security Policy**: Deploy restrictive CSP headers
4. **Output Encoding**: Use context-appropriate output encoding
### Code Fixes
```javascript
// Before refresh, sanitize or validate content
function safeRefresh(element) {
// Validate label content before refresh
const label = $(`label[for="${element.attr('id')}"]`);
const content = label.html();
// Check for potentially dangerous content
if (content.includes('<') || content.includes('javascript:')) {
console.warn('Potentially dangerous content detected');
return;
}
element.checkboxradio("refresh");
}
```
### Security Headers
```javascript
// Express.js security headers
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
```
## 📚 Educational Value
This project serves as an educational resource for:
- **Security Researchers**: Understanding DOM manipulation vulnerabilities
- **Web Developers**: Learning about jQuery UI security considerations
- **Penetration Testers**: Practical XSS exploitation techniques
- **Security Students**: Hands-on vulnerability analysis
## 🔗 References
- [CVE-2022-31160 Official Entry](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-31160)
- [jQuery UI Security Advisory](https://blog.jqueryui.com/2022/07/jquery-ui-1-13-2-released/)
- [OWASP XSS Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html)
- [CWE-79: Cross-site Scripting](https://cwe.mitre.org/data/definitions/79.html)
## 📈 Testing Checklist
When using this demonstration:
### Pre-Testing Setup:
- [ ] Verify jQuery UI version (should be 1.13.0)
- [ ] Test with developer tools open (F12)
- [ ] Access survey at http://localhost:3000/survey
- [ ] Check console for initialization messages
### Vulnerability Testing:
- [ ] Click "🔄 Refresh Widgets" button
- [ ] **Network Security Option**: Verify immediate alert execution
- [ ] **Mobile Security Option**: Verify immediate alert execution
- [ ] **Cloud Security Option**: Hover over "[Hover to trigger]" text
- [ ] Check console for detailed vulnerability logging
### Analysis Verification:
- [ ] Validate XSS payload execution (3 different types)
- [ ] Test widget reset functionality
- [ ] Verify checkbox visual feedback works correctly
## 🤝 Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add appropriate documentation
5. Submit a pull request
### Areas for Enhancement
- Additional payload examples
- More detailed analysis tools
- Enhanced visual demonstrations
## ⚖️ Legal Disclaimer
This software is provided for educational and research purposes only. The authors and contributors:
- Are not responsible for any misuse of this software
- Do not encourage or condone malicious activities
- Recommend using only in authorized testing environments
- Advise following responsible disclosure practices
## 📄 License
This project is provided under the MIT License for educational purposes.
---
**Created for security research and education** | **Use responsibly** | **Report vulnerabilities through proper channels**
文件快照
[4.0K] /data/pocs/b386bd766cf10e0305830eee284daacb205cdce3
├── [ 399] Dockerfile
├── [4.0K] node_modules
│ ├── [4.0K] accepts
│ │ ├── [5.0K] HISTORY.md
│ │ ├── [5.1K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [4.0K] README.md
│ ├── [4.0K] array-flatten
│ │ ├── [1.2K] array-flatten.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 879] package.json
│ │ └── [1.2K] README.md
│ ├── [4.0K] body-parser
│ │ ├── [ 16K] HISTORY.md
│ │ ├── [2.6K] index.js
│ │ ├── [4.0K] lib
│ │ │ ├── [4.2K] read.js
│ │ │ └── [4.0K] types
│ │ │ ├── [5.2K] json.js
│ │ │ ├── [1.8K] raw.js
│ │ │ ├── [2.2K] text.js
│ │ │ └── [6.3K] urlencoded.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.4K] package.json
│ │ ├── [ 19K] README.md
│ │ └── [1.2K] SECURITY.md
│ ├── [4.0K] bytes
│ │ ├── [1.7K] History.md
│ │ ├── [3.5K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 959] package.json
│ │ └── [4.7K] Readme.md
│ ├── [4.0K] call-bind-apply-helpers
│ │ ├── [ 23] actualApply.d.ts
│ │ ├── [ 280] actualApply.js
│ │ ├── [ 614] applyBind.d.ts
│ │ ├── [ 264] applyBind.js
│ │ ├── [1.9K] CHANGELOG.md
│ │ ├── [ 34] functionApply.d.ts
│ │ ├── [ 99] functionApply.js
│ │ ├── [ 33] functionCall.d.ts
│ │ ├── [ 97] functionCall.js
│ │ ├── [2.2K] index.d.ts
│ │ ├── [ 511] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.4K] package.json
│ │ ├── [2.3K] README.md
│ │ ├── [ 82] reflectApply.d.ts
│ │ ├── [ 132] reflectApply.js
│ │ ├── [4.0K] test
│ │ │ └── [2.6K] index.js
│ │ └── [ 115] tsconfig.json
│ ├── [4.0K] call-bound
│ │ ├── [2.8K] CHANGELOG.md
│ │ ├── [4.5K] index.d.ts
│ │ ├── [ 687] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.4K] package.json
│ │ ├── [1.9K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [2.4K] index.js
│ │ └── [ 137] tsconfig.json
│ ├── [4.0K] content-disposition
│ │ ├── [1020] HISTORY.md
│ │ ├── [ 10K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.2K] package.json
│ │ └── [5.1K] README.md
│ ├── [4.0K] content-type
│ │ ├── [ 523] HISTORY.md
│ │ ├── [4.9K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.0K] package.json
│ │ └── [2.7K] README.md
│ ├── [4.0K] cookie
│ │ ├── [7.9K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ ├── [ 11K] README.md
│ │ └── [1.2K] SECURITY.md
│ ├── [4.0K] cookie-signature
│ │ ├── [ 695] History.md
│ │ ├── [1.2K] index.js
│ │ ├── [ 492] package.json
│ │ └── [1.5K] Readme.md
│ ├── [4.0K] debug
│ │ ├── [ 11K] CHANGELOG.md
│ │ ├── [ 321] component.json
│ │ ├── [1.7K] karma.conf.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.0K] Makefile
│ │ ├── [ 40] node.js
│ │ ├── [1.1K] package.json
│ │ ├── [ 17K] README.md
│ │ └── [4.0K] src
│ │ ├── [4.6K] browser.js
│ │ ├── [4.3K] debug.js
│ │ ├── [ 263] index.js
│ │ ├── [ 373] inspector-log.js
│ │ └── [5.9K] node.js
│ ├── [4.0K] depd
│ │ ├── [2.2K] History.md
│ │ ├── [ 11K] index.js
│ │ ├── [4.0K] lib
│ │ │ └── [4.0K] browser
│ │ │ └── [1.5K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.3K] package.json
│ │ └── [9.8K] Readme.md
│ ├── [4.0K] destroy
│ │ ├── [4.2K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [2.4K] README.md
│ ├── [4.0K] dunder-proto
│ │ ├── [1.5K] CHANGELOG.md
│ │ ├── [ 121] get.d.ts
│ │ ├── [ 980] get.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.1K] package.json
│ │ ├── [1.9K] README.md
│ │ ├── [ 144] set.d.ts
│ │ ├── [1.2K] set.js
│ │ ├── [4.0K] test
│ │ │ ├── [1.1K] get.js
│ │ │ ├── [ 51] index.js
│ │ │ └── [1.7K] set.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] ee-first
│ │ ├── [1.6K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 859] package.json
│ │ └── [2.6K] README.md
│ ├── [4.0K] encodeurl
│ │ ├── [1.5K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [3.1K] README.md
│ ├── [4.0K] escape-html
│ │ ├── [1.3K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 434] package.json
│ │ └── [ 707] Readme.md
│ ├── [4.0K] es-define-property
│ │ ├── [2.2K] CHANGELOG.md
│ │ ├── [ 93] index.d.ts
│ │ ├── [ 288] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.1K] package.json
│ │ ├── [2.0K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [1.3K] index.js
│ │ └── [ 138] tsconfig.json
│ ├── [4.0K] es-errors
│ │ ├── [1.8K] CHANGELOG.md
│ │ ├── [ 68] eval.d.ts
│ │ ├── [ 75] eval.js
│ │ ├── [ 56] index.d.ts
│ │ ├── [ 66] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.1K] package.json
│ │ ├── [ 71] range.d.ts
│ │ ├── [ 77] range.js
│ │ ├── [2.1K] README.md
│ │ ├── [ 83] ref.d.ts
│ │ ├── [ 79] ref.js
│ │ ├── [ 74] syntax.d.ts
│ │ ├── [ 79] syntax.js
│ │ ├── [4.0K] test
│ │ │ └── [ 356] index.js
│ │ ├── [3.1K] tsconfig.json
│ │ ├── [ 67] type.d.ts
│ │ ├── [ 75] type.js
│ │ ├── [ 65] uri.d.ts
│ │ └── [ 73] uri.js
│ ├── [4.0K] es-object-atoms
│ │ ├── [2.1K] CHANGELOG.md
│ │ ├── [ 59] index.d.ts
│ │ ├── [ 67] index.js
│ │ ├── [ 72] isObject.d.ts
│ │ ├── [ 161] isObject.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.2K] package.json
│ │ ├── [2.5K] README.md
│ │ ├── [ 123] RequireObjectCoercible.d.ts
│ │ ├── [ 313] RequireObjectCoercible.js
│ │ ├── [4.0K] test
│ │ │ └── [1.1K] index.js
│ │ ├── [ 352] ToObject.d.ts
│ │ ├── [ 250] ToObject.js
│ │ └── [ 81] tsconfig.json
│ ├── [4.0K] etag
│ │ ├── [1.7K] HISTORY.md
│ │ ├── [2.4K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.3K] package.json
│ │ └── [4.1K] README.md
│ ├── [4.0K] express
│ │ ├── [112K] History.md
│ │ ├── [ 224] index.js
│ │ ├── [4.0K] lib
│ │ │ ├── [ 14K] application.js
│ │ │ ├── [2.4K] express.js
│ │ │ ├── [4.0K] middleware
│ │ │ │ ├── [ 853] init.js
│ │ │ │ └── [ 885] query.js
│ │ │ ├── [ 12K] request.js
│ │ │ ├── [ 28K] response.js
│ │ │ ├── [4.0K] router
│ │ │ │ ├── [ 15K] index.js
│ │ │ │ ├── [3.2K] layer.js
│ │ │ │ └── [4.3K] route.js
│ │ │ ├── [5.7K] utils.js
│ │ │ └── [3.2K] view.js
│ │ ├── [1.2K] LICENSE
│ │ ├── [2.7K] package.json
│ │ └── [9.6K] Readme.md
│ ├── [4.0K] finalhandler
│ │ ├── [4.4K] HISTORY.md
│ │ ├── [6.6K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.2K] package.json
│ │ ├── [4.0K] README.md
│ │ └── [1.2K] SECURITY.md
│ ├── [4.0K] forwarded
│ │ ├── [ 400] HISTORY.md
│ │ ├── [1.5K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [1.6K] README.md
│ ├── [4.0K] fresh
│ │ ├── [1.5K] HISTORY.md
│ │ ├── [2.6K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.3K] package.json
│ │ └── [3.3K] README.md
│ ├── [4.0K] function-bind
│ │ ├── [ 13K] CHANGELOG.md
│ │ ├── [2.0K] implementation.js
│ │ ├── [ 126] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.2K] package.json
│ │ ├── [1.7K] README.md
│ │ └── [4.0K] test
│ │ └── [8.8K] index.js
│ ├── [4.0K] get-intrinsic
│ │ ├── [ 15K] CHANGELOG.md
│ │ ├── [ 14K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.5K] package.json
│ │ ├── [2.7K] README.md
│ │ └── [4.0K] test
│ │ └── [8.6K] GetIntrinsic.js
│ ├── [4.0K] get-proto
│ │ ├── [1.0K] CHANGELOG.md
│ │ ├── [ 126] index.d.ts
│ │ ├── [ 821] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [ 125] Object.getPrototypeOf.d.ts
│ │ ├── [ 156] Object.getPrototypeOf.js
│ │ ├── [2.1K] package.json
│ │ ├── [1.8K] README.md
│ │ ├── [ 67] Reflect.getPrototypeOf.d.ts
│ │ ├── [ 150] Reflect.getPrototypeOf.js
│ │ ├── [4.0K] test
│ │ │ └── [2.3K] index.js
│ │ └── [ 118] tsconfig.json
│ ├── [4.0K] gopd
│ │ ├── [3.0K] CHANGELOG.md
│ │ ├── [ 42] gOPD.d.ts
│ │ ├── [ 97] gOPD.js
│ │ ├── [ 173] index.d.ts
│ │ ├── [ 206] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.0K] package.json
│ │ ├── [1.5K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [ 656] index.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] hasown
│ │ ├── [2.5K] CHANGELOG.md
│ │ ├── [ 117] index.d.ts
│ │ ├── [ 206] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [2.2K] package.json
│ │ ├── [1.6K] README.md
│ │ └── [ 73] tsconfig.json
│ ├── [4.0K] has-symbols
│ │ ├── [9.2K] CHANGELOG.md
│ │ ├── [ 73] index.d.ts
│ │ ├── [ 447] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.9K] package.json
│ │ ├── [2.0K] README.md
│ │ ├── [ 69] shams.d.ts
│ │ ├── [1.9K] shams.js
│ │ ├── [4.0K] test
│ │ │ ├── [ 654] index.js
│ │ │ ├── [4.0K] shams
│ │ │ │ ├── [ 797] core-js.js
│ │ │ │ └── [ 760] get-own-property-symbols.js
│ │ │ └── [2.1K] tests.js
│ │ └── [ 143] tsconfig.json
│ ├── [4.0K] http-errors
│ │ ├── [3.9K] HISTORY.md
│ │ ├── [6.2K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.3K] package.json
│ │ └── [5.8K] README.md
│ ├── [4.0K] iconv-lite
│ │ ├── [4.2K] Changelog.md
│ │ ├── [4.0K] encodings
│ │ │ ├── [ 21K] dbcs-codec.js
│ │ │ ├── [8.1K] dbcs-data.js
│ │ │ ├── [ 710] index.js
│ │ │ ├── [6.0K] internal.js
│ │ │ ├── [2.1K] sbcs-codec.js
│ │ │ ├── [ 31K] sbcs-data-generated.js
│ │ │ ├── [4.6K] sbcs-data.js
│ │ │ ├── [4.0K] tables
│ │ │ │ ├── [ 17K] big5-added.json
│ │ │ │ ├── [ 46K] cp936.json
│ │ │ │ ├── [ 37K] cp949.json
│ │ │ │ ├── [ 41K] cp950.json
│ │ │ │ ├── [ 40K] eucjp.json
│ │ │ │ ├── [2.2K] gb18030-ranges.json
│ │ │ │ ├── [1.2K] gbk-added.json
│ │ │ │ └── [ 23K] shiftjis.json
│ │ │ ├── [4.9K] utf16.js
│ │ │ └── [9.0K] utf7.js
│ │ ├── [4.0K] lib
│ │ │ ├── [1.1K] bom-handling.js
│ │ │ ├── [8.5K] extend-node.js
│ │ │ ├── [ 982] index.d.ts
│ │ │ ├── [5.0K] index.js
│ │ │ └── [3.3K] streams.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [1.2K] package.json
│ │ └── [6.4K] README.md
│ ├── [4.0K] inherits
│ │ ├── [ 753] inherits_browser.js
│ │ ├── [ 250] inherits.js
│ │ ├── [ 749] LICENSE
│ │ ├── [ 581] package.json
│ │ └── [1.6K] README.md
│ ├── [4.0K] ipaddr.js
│ │ ├── [9.5K] ipaddr.min.js
│ │ ├── [4.0K] lib
│ │ │ ├── [ 19K] ipaddr.js
│ │ │ └── [2.9K] ipaddr.js.d.ts
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 719] package.json
│ │ └── [8.1K] README.md
│ ├── [4.0K] math-intrinsics
│ │ ├── [ 18] abs.d.ts
│ │ ├── [ 73] abs.js
│ │ ├── [1.4K] CHANGELOG.md
│ │ ├── [4.0K] constants
│ │ │ ├── [ 71] maxArrayLength.d.ts
│ │ │ ├── [ 110] maxArrayLength.js
│ │ │ ├── [ 77] maxSafeInteger.d.ts
│ │ │ ├── [ 231] maxSafeInteger.js
│ │ │ ├── [ 71] maxValue.d.ts
│ │ │ └── [ 197] maxValue.js
│ │ ├── [ 20] floor.d.ts
│ │ ├── [ 77] floor.js
│ │ ├── [ 80] isFinite.d.ts
│ │ ├── [ 262] isFinite.js
│ │ ├── [ 87] isInteger.d.ts
│ │ ├── [ 410] isInteger.js
│ │ ├── [ 22] isNaN.d.ts
│ │ ├── [ 121] isNaN.js
│ │ ├── [ 79] isNegativeZero.d.ts
│ │ ├── [ 143] isNegativeZero.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [ 18] max.d.ts
│ │ ├── [ 73] max.js
│ │ ├── [ 18] min.d.ts
│ │ ├── [ 73] min.js
│ │ ├── [ 76] mod.d.ts
│ │ ├── [ 218] mod.js
│ │ ├── [2.6K] package.json
│ │ ├── [ 18] pow.d.ts
│ │ ├── [ 73] pow.js
│ │ ├── [1.8K] README.md
│ │ ├── [ 20] round.d.ts
│ │ ├── [ 77] round.js
│ │ ├── [ 57] sign.d.ts
│ │ ├── [ 214] sign.js
│ │ ├── [4.0K] test
│ │ │ └── [6.2K] index.js
│ │ └── [ 36] tsconfig.json
│ ├── [4.0K] media-typer
│ │ ├── [ 461] HISTORY.md
│ │ ├── [6.2K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 759] package.json
│ │ └── [2.3K] README.md
│ ├── [4.0K] merge-descriptors
│ │ ├── [ 363] HISTORY.md
│ │ ├── [1.2K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.0K] package.json
│ │ └── [1.3K] README.md
│ ├── [4.0K] methods
│ │ ├── [ 427] HISTORY.md
│ │ ├── [1.0K] index.js
│ │ ├── [1.2K] LICENSE
│ │ ├── [ 947] package.json
│ │ └── [1.7K] README.md
│ ├── [4.0K] mime
│ │ ├── [9.3K] CHANGELOG.md
│ │ ├── [ 149] cli.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [2.7K] mime.js
│ │ ├── [ 933] package.json
│ │ ├── [2.1K] README.md
│ │ ├── [4.0K] src
│ │ │ ├── [1.3K] build.js
│ │ │ └── [2.3K] test.js
│ │ └── [ 31K] types.json
│ ├── [4.0K] mime-db
│ │ ├── [182K] db.json
│ │ ├── [ 12K] HISTORY.md
│ │ ├── [ 189] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.6K] package.json
│ │ └── [4.0K] README.md
│ ├── [4.0K] mime-types
│ │ ├── [8.6K] HISTORY.md
│ │ ├── [3.6K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [3.4K] README.md
│ ├── [4.0K] ms
│ │ ├── [2.7K] index.js
│ │ ├── [1.1K] license.md
│ │ ├── [ 704] package.json
│ │ └── [1.7K] readme.md
│ ├── [4.0K] negotiator
│ │ ├── [2.4K] HISTORY.md
│ │ ├── [2.4K] index.js
│ │ ├── [4.0K] lib
│ │ │ ├── [3.0K] charset.js
│ │ │ ├── [3.4K] encoding.js
│ │ │ ├── [3.3K] language.js
│ │ │ └── [5.2K] mediaType.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 993] package.json
│ │ └── [4.8K] README.md
│ ├── [4.0K] object-inspect
│ │ ├── [ 36K] CHANGELOG.md
│ │ ├── [4.0K] example
│ │ │ ├── [ 391] all.js
│ │ │ ├── [ 116] circular.js
│ │ │ ├── [ 126] fn.js
│ │ │ └── [ 251] inspect.js
│ │ ├── [ 19K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.8K] package.json
│ │ ├── [ 365] package-support.json
│ │ ├── [2.9K] readme.markdown
│ │ ├── [4.0K] test
│ │ │ ├── [2.0K] bigint.js
│ │ │ ├── [4.0K] browser
│ │ │ │ └── [ 416] dom.js
│ │ │ ├── [ 451] circular.js
│ │ │ ├── [ 400] deep.js
│ │ │ ├── [1.5K] element.js
│ │ │ ├── [1.5K] err.js
│ │ │ ├── [ 683] fakes.js
│ │ │ ├── [2.2K] fn.js
│ │ │ ├── [ 372] global.js
│ │ │ ├── [ 514] has.js
│ │ │ ├── [ 255] holes.js
│ │ │ ├── [6.5K] indent-option.js
│ │ │ ├── [4.8K] inspect.js
│ │ │ ├── [ 268] lowbyte.js
│ │ │ ├── [2.3K] number.js
│ │ │ ├── [1.5K] quoteStyle.js
│ │ │ ├── [1.5K] toStringTag.js
│ │ │ ├── [ 302] undef.js
│ │ │ └── [8.2K] values.js
│ │ ├── [ 534] test-core-js.js
│ │ └── [ 42] util.inspect.js
│ ├── [4.0K] on-finished
│ │ ├── [1.8K] HISTORY.md
│ │ ├── [4.3K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.0K] package.json
│ │ └── [5.0K] README.md
│ ├── [4.0K] parseurl
│ │ ├── [1.0K] HISTORY.md
│ │ ├── [2.7K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.2K] package.json
│ │ └── [4.0K] README.md
│ ├── [4.0K] path-to-regexp
│ │ ├── [3.7K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 554] package.json
│ │ └── [1.1K] Readme.md
│ ├── [4.0K] proxy-addr
│ │ ├── [2.9K] HISTORY.md
│ │ ├── [5.9K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.2K] package.json
│ │ └── [4.0K] README.md
│ ├── [4.0K] qs
│ │ ├── [ 31K] CHANGELOG.md
│ │ ├── [4.0K] dist
│ │ │ └── [ 46K] qs.js
│ │ ├── [4.0K] lib
│ │ │ ├── [ 476] formats.js
│ │ │ ├── [ 211] index.js
│ │ │ ├── [ 11K] parse.js
│ │ │ ├── [ 11K] stringify.js
│ │ │ └── [7.1K] utils.js
│ │ ├── [1.6K] LICENSE.md
│ │ ├── [3.0K] package.json
│ │ ├── [ 24K] README.md
│ │ └── [4.0K] test
│ │ ├── [7.5K] empty-keys-cases.js
│ │ ├── [ 46K] parse.js
│ │ ├── [ 52K] stringify.js
│ │ └── [5.0K] utils.js
│ ├── [4.0K] range-parser
│ │ ├── [ 917] HISTORY.md
│ │ ├── [2.8K] index.js
│ │ ├── [1.2K] LICENSE
│ │ ├── [1.2K] package.json
│ │ └── [2.2K] README.md
│ ├── [4.0K] raw-body
│ │ ├── [5.9K] HISTORY.md
│ │ ├── [2.2K] index.d.ts
│ │ ├── [7.0K] index.js
│ │ ├── [1.2K] LICENSE
│ │ ├── [1.3K] package.json
│ │ ├── [6.4K] README.md
│ │ └── [1.2K] SECURITY.md
│ ├── [4.0K] safe-buffer
│ │ ├── [8.5K] index.d.ts
│ │ ├── [1.6K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.0K] package.json
│ │ └── [ 19K] README.md
│ ├── [4.0K] safer-buffer
│ │ ├── [1.4K] dangerous.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 822] package.json
│ │ ├── [ 12K] Porting-Buffer.md
│ │ ├── [8.1K] Readme.md
│ │ ├── [2.1K] safer.js
│ │ └── [ 15K] tests.js
│ ├── [4.0K] send
│ │ ├── [ 13K] HISTORY.md
│ │ ├── [ 23K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [4.0K] node_modules
│ │ │ ├── [4.0K] encodeurl
│ │ │ │ ├── [ 238] HISTORY.md
│ │ │ │ ├── [1.5K] index.js
│ │ │ │ ├── [1.1K] LICENSE
│ │ │ │ ├── [1.1K] package.json
│ │ │ │ └── [3.8K] README.md
│ │ │ └── [4.0K] ms
│ │ │ ├── [3.0K] index.js
│ │ │ ├── [1.1K] license.md
│ │ │ ├── [ 732] package.json
│ │ │ └── [1.8K] readme.md
│ │ ├── [1.5K] package.json
│ │ ├── [9.3K] README.md
│ │ └── [1.1K] SECURITY.md
│ ├── [4.0K] serve-static
│ │ ├── [ 11K] HISTORY.md
│ │ ├── [4.4K] index.js
│ │ ├── [1.2K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [7.6K] README.md
│ ├── [4.0K] setprototypeof
│ │ ├── [ 93] index.d.ts
│ │ ├── [ 407] index.js
│ │ ├── [ 727] LICENSE
│ │ ├── [1.2K] package.json
│ │ ├── [ 844] README.md
│ │ └── [4.0K] test
│ │ └── [ 690] index.js
│ ├── [4.0K] side-channel
│ │ ├── [ 10K] CHANGELOG.md
│ │ ├── [ 486] index.d.ts
│ │ ├── [1.2K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.3K] package.json
│ │ ├── [2.1K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [2.5K] index.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] side-channel-list
│ │ ├── [ 818] CHANGELOG.md
│ │ ├── [ 335] index.d.ts
│ │ ├── [3.3K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [ 721] list.d.ts
│ │ ├── [2.2K] package.json
│ │ ├── [2.2K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [2.6K] index.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] side-channel-map
│ │ ├── [1.2K] CHANGELOG.md
│ │ ├── [ 367] index.d.ts
│ │ ├── [1.9K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.3K] package.json
│ │ ├── [2.2K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [2.8K] index.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] side-channel-weakmap
│ │ ├── [1.4K] CHANGELOG.md
│ │ ├── [ 382] index.d.ts
│ │ ├── [2.6K] index.js
│ │ ├── [1.0K] LICENSE
│ │ ├── [2.4K] package.json
│ │ ├── [2.3K] README.md
│ │ ├── [4.0K] test
│ │ │ └── [2.9K] index.js
│ │ └── [ 116] tsconfig.json
│ ├── [4.0K] statuses
│ │ ├── [1.7K] codes.json
│ │ ├── [1.5K] HISTORY.md
│ │ ├── [2.5K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.4K] package.json
│ │ └── [3.5K] README.md
│ ├── [4.0K] toidentifier
│ │ ├── [ 128] HISTORY.md
│ │ ├── [ 504] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [1.8K] README.md
│ ├── [4.0K] type-is
│ │ ├── [5.3K] HISTORY.md
│ │ ├── [5.4K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [1.1K] package.json
│ │ └── [5.1K] README.md
│ ├── [4.0K] unpipe
│ │ ├── [ 59] HISTORY.md
│ │ ├── [1.1K] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 770] package.json
│ │ └── [1.2K] README.md
│ ├── [4.0K] utils-merge
│ │ ├── [ 381] index.js
│ │ ├── [1.1K] LICENSE
│ │ ├── [ 857] package.json
│ │ └── [1.3K] README.md
│ └── [4.0K] vary
│ ├── [ 792] HISTORY.md
│ ├── [2.9K] index.js
│ ├── [1.1K] LICENSE
│ ├── [1.2K] package.json
│ └── [2.7K] README.md
├── [ 486] package.json
├── [ 29K] package-lock.json
├── [ 11K] README.md
├── [ 763] server.js
└── [ 11K] simplified-survey.html
110 directories, 560 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。