整理网络安全类的查询
正则表达式基础语法
元字符
.- 匹配任意单个字符(除换行符)\d- 匹配数字\w- 匹配字母、数字、下划线\s- 匹配空白字符^- 匹配字符串开始$- 匹配字符串结束
量词
*- 0次或多次+- 1次或多次?- 0次或1次{n}- 恰好n次{n,}- 至少n次{n,m}- n到m次
字符类
[abc]- 匹配a、b或c[a-z]- 匹配a到z的任意字符[^abc]- 匹配除a、b、c外的字符
分组和选择
(abc)- 捕获分组(?:abc)- 非捕获分组a|b- 匹配a或b
网络安全类正则表达式查询表格
| ID | 类别 | 标题 | 正则表达式 | 描述 | 示例 | 注意事项 |
|---|---|---|---|---|---|---|
| 89 | 网络安全类 | 检测SQL注入攻击 | `(UNION | SELECT | DROP | INSERT |
| 90 | 网络安全类 | 检测XSS跨站脚本 | `(<script | onclick | onload | onerror |
| 91 | 网络安全类 | 扫描敏感信息泄露 | `(1[3-9]\d{9} | [1-9]\d{5}(19 | 20)\d{2}((0[1-9]) | (1[0-2]))(([0-2][1-9]) |
| 92 | 网络安全类 | 匹配暴力破解异常IP | (\d+\.\d+\.\d+\.\d+)\s+Failed password |
匹配登录失败的IP地址 | 192.168.1.1 Failed password for root → 提取IP:192.168.1.1 |
1. IP地址格式验证不严格 2. 依赖特定的日志格式 3. 可能匹配到非恶意失败 |
常见错误及避免方法
1. SQL注入检测的局限性
问题:当前正则表达式过于简单,容易被绕过
regex
// 当前写法
(UNION|SELECT|DROP|INSERT|DELETE|UPDATE|ALTER|EXEC)\s+
// 改进建议
(?i)(union\s+select|drop\s+table|insert\s+into|delete\s+from)
2. XSS检测的不足
问题:无法检测大小写变种和编码绕过
regex
// 当前写法
(<script|onclick|onload|onerror|javascript:)
// 改进建议
(?i)(<script|onclick|onload|onerror|javascript:|&#x)
3. 敏感信息匹配的精度问题
问题:身份证和银行卡验证不够精确
regex
// 改进的身份证验证(更精确)
[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]
// 改进的银行卡验证(更合理)
\d{16,19}(?=\D|$)
4. IP地址匹配的改进
问题:当前匹配可能匹配到非IP地址
regex
// 当前写法
(\d+\.\d+\.\d+\.\d+)
// 改进建议
\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b
最佳实践建议
- 始终使用忽略大小写标志 :
(?i)或对应编程语言的忽略大小写选项 - 添加单词边界 :使用
\b避免部分匹配 - 考虑性能优化:避免过度复杂的正则表达式
- 结合其他验证:正则表达式应作为第一层过滤,结合业务逻辑验证
- 定期更新规则:根据新的攻击手法更新检测规则
这些正则表达式在实际应用中需要根据具体场景进行调整和优化,建议配合专业的WAF(Web应用防火墙)使用。
我用代码做了一个正则表达式查询库,可以查询100种典型应用,也可以验证和测试你的代码,可以点击直接下载:
正则表达式查询库 覆盖数据验证、文本提取/清洗、开发调试、日志分析、网络安全等数十个领域的100种正则表达式应用场景



