URL参数深度分析 - 解码并检测潜在注入
分解查询参数,高亮可能存在的SQL注入或XSS模式,辅助安全审查。
UD5工具箱
使用 URL.canParse() 静态方法安全检测 URL 有效性,无需 try-catch,无异常抛出。
URL.canParse()
/api/data 需要 base URL点击下方标签快速填充测试
| 浏览器 | 最低版本 | 状态 |
|---|---|---|
| Chrome | 120+ | 支持 |
| Firefox | 115+ | 支持 |
| Safari | 17+ | 支持 |
| Edge | 120+ | 支持 |
| Node.js | 19.9+ | 支持 |
try-catch 回退方案。
URL.canParse() 是 URL API 的一个静态方法,用于安全地检测一个 URL 字符串是否可以被成功解析。它返回 true 或 false,不会抛出异常。
相比之下,new URL(url) 在解析失败时会抛出 TypeError 异常,需要使用 try-catch 包裹。因此 URL.canParse() 更简洁、更安全,特别适合在条件判断中使用:
// ❌ 旧方式
try {
new URL(userInput);
// 有效
} catch {
// 无效
}
// ✅ 新方式
if (URL.canParse(userInput)) {
// 有效
}
不能完全保证安全。URL.canParse() 仅验证 URL 的语法格式是否合法,它不会:
对于安全敏感的应用,建议结合以下措施:
https:、mailto:)new URL() 解析后检查 hostname、protocol 等属性URL.canParse(url, base) 的第二个参数 base 用于解析相对 URL。
url 是绝对 URL(如 https://example.com/page),base 参数会被忽略。url 是相对路径(如 /api/data 或 ../users),则必须提供有效的 base 才能成功解析。示例:
URL.canParse('/api/users', 'https://example.com') // true
URL.canParse('/api/users') // false (无base)
URL.canParse('https://other.com', 'https://example.com') // true (绝对URL,base被忽略)
URL.canParse() 支持多种协议,包括但不限于:
http:、https:、ftp:、ws:、wss:data:、blob:、file:(取决于环境)myapp: 等也视为有效基本上,只要协议名后跟着合法的 URL 结构,就会被认为有效。无效的协议格式(如缺少 :// 后的内容、包含非法字符等)会导致解析失败。
本工具内置了 polyfill,在不支持的浏览器中会自动使用 try-catch 方式进行回退。你也可以在自己的项目中使用以下 polyfill:
if (!URL.canParse) {
URL.canParse = function(url, base) {
try {
new URL(url, base);
return true;
} catch {
return false;
}
};
}
此外,主流浏览器的最新版本均已支持:Chrome 120+、Firefox 115+、Safari 17+、Edge 120+。
这两个是互补的静态方法:
URL.canParse(url, base) — 返回 boolean,仅检测是否可解析URL.parse(url, base) — 返回 URL 对象或 null,解析成功返回 URL 实例,失败返回 null(不抛异常)如果你需要检测有效性并同时使用解析结果,URL.parse() 更高效:
const parsed = URL.parse(userInput);
if (parsed) {
console.log(parsed.hostname); // 直接使用
}
URL.parse() 的浏览器支持与 URL.canParse() 相同。
分解查询参数,高亮可能存在的SQL注入或XSS模式,辅助安全审查。
模拟接收包含一次性密码的短信,展示 navigator.credentials.get({otp}) 如何自动提取 OTP 并填入表单。
输入长链接,生成一个伴随随机短码的完整离线URL(可自定义域名前缀)。
从内置库随机选取主流浏览器的User-Agent字符串,一键复制用于请求头。
输入用户名和密码,生成用于基本认证的.htpasswd加密条目。
输入正则表达式,检测潜在的指数级回溯陷阱,避免服务器性能被恶意输入拖垮。
利用浏览器Crypto API生成密码学安全的随机字节序列及对应的整数和十六进制。
定义脱敏规则(如手机号中间4位星号,邮箱部分隐藏),对 JSON 或 CSV 数据执行批量掩码。
请求Idle Detection权限,监测用户是否离开或处于空闲状态,实时更新状态。
调用设备联系人选择界面,获取用户选中的联系人信息(需支持环境)。
将文本中的手机号、身份证、邮箱等敏感信息中间部分替换为星号,适应演示或日志。
输入Base32密钥手动生成6位动态验证码,兼容Google Authenticator,前端算法实现不联网。
输入IPv4地址,自动告知属于哪一类(A,B,C),是否私有,以及网络和主机部分。
团队成员在会前用温度计匿名标情绪,汇总显示利于主持人引导。
模板化记录团队成员昨日完成、今日计划与阻塞项,支持导出Markdown便于分享。
演示如何用Intersection Observer实现滚动到底部自动加载内容的经典模式。
编写正则表达式并指定替换模式(如 '$1-$2'),实时查看文本替换结果,支持命名捕获组。
选择表A和表B的样本数据,查看INNER/LEFT/RIGHT/FULL JOIN的韦恩图与实际输出结果。
浏览器端实现DES对称加密算法,支持ECB/CBC模式及自定义密钥,安全处理敏感数据,无需上传服务器。
输入包含隐私信息的文本,一键将手机号、身份证等部分遮盖。
为输入框生成常见格式掩码(如电话、日期、信用卡),输出JS实现代码,规范用户输入。
快速生成PWA所需的manifest.json文件,填写应用名、图标、主题色、启动网址等字段。
逐步演示OAuth2授权码、隐式及密码模式交互流程,帮助理解重定向、Token交换与刷新机制。
上传植物照片,记录采集时间、地点与种名,建立个人数字标本馆,支持标签筛选。
输入日期和数值,生成类似GitHub贡献图的年度热力图,可自定义颜色和统计。
构建带有自定义头和方法复杂跨域请求,检查预检与响应。
设置目标日期,生成一个精巧的倒计时代码片段,可嵌入任何网页。
登记食材、开封日期与保质期,自动排序并高亮快到期项,减少浪费。
粘贴Shadow DOM代码,直观预览封装组件内部的CSS作用域及其对外界的影响。
添加股票代码、加密货币或自定义资产,手动输入价格或获取公开API(演示)以追踪变化。