Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2022-31160 PoC — jQuery 跨站脚本漏洞

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

![Security Badge](https://img.shields.io/badge/Security-Vulnerability%20Demo-red)
![jQuery UI](https://img.shields.io/badge/jQuery%20UI-1.13.0-blue)
![CVE](https://img.shields.io/badge/CVE-2022--31160-critical)
![Docker](https://img.shields.io/badge/Docker-Ready-blue)

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 &lt;img src=x onerror=&quot;alert('XSS')&quot;&gt;
  <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**: `&lt;img src=x onerror=&quot;...&quot;&gt;` - Immediate execution
  - **Mobile Security XSS**: `&lt;details ontoggle=&quot;...&quot; open&gt;` - Immediate execution  
  - **Cloud Security XSS**: `&lt;span onmouseover=&quot;...&quot;&gt;` - 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) -->
&lt;img src=x onerror=&quot;console.log('XSS via widget refresh!'); alert('Widget refresh XSS executed!');&quot;&gt;

<!-- Mobile Security: Details toggle XSS (Immediate execution) -->
&lt;details ontoggle=&quot;alert('Mobile Security XSS executed!'); console.log('Mobile XSS via details ontoggle!')&quot; open&gt;&lt;summary&gt;&lt;/summary&gt;&lt;/details&gt;

<!-- Cloud Security: Interactive XSS (User interaction required) -->
&lt;span onmouseover=&quot;alert('Hover XSS executed!'); console.log('Cloud Security XSS via mouseover!')&quot; style=&quot;text-decoration:underline; cursor:pointer;&quot;&gt;[Hover to trigger]&lt;/span&gt;
```

### 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 (`&lt;`, `&quot;`) 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**
File Snapshot

[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
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. If the original source is unavailable, please email f.jinxu#gmail.com for a local snapshot (replace # with @).
    3. Shenlong has snapshotted the POC code for you. To support long-term maintenance, please consider donating. Thank you for your support.