当前位置: 首页 > news >正文

.NET 函数:检测 SQL 注入风险

以下是一个用 C# 编写的 .NET 函数,用于检测用户输入是否存在潜在的 SQL 注入风险:

using System;
using System.Text.RegularExpressions;public class SqlInjectionChecker
{// 常见 SQL 注入关键词和模式private static readonly string[] SqlKeywords = {"--", ";", "/*", "*/", "@@", "@", "char", "nchar", "varchar", "nvarchar","alter", "begin", "cast", "create", "cursor", "declare", "delete", "drop", "end", "exec", "execute", "fetch", "insert", "kill", "open", "select", "sys", "sysobjects", "syscolumns", "table", "update", "union", "where", "xp_"};// 检测输入是否可能包含 SQL 注入public static bool IsSqlInjectionRisk(string input){if (string.IsNullOrWhiteSpace(input)){return false;}// 检查 SQL 注释和语句分隔符if (input.Contains("--") || input.Contains(";") || input.Contains("/*") || input.Contains("*/")){return true;}// 检查常见 SQL 关键词(不区分大小写)foreach (var keyword in SqlKeywords){if (Regex.IsMatch(input, $@"\b{keyword}\b", RegexOptions.IgnoreCase)){return true;}}// 检查可疑的 SQL 表达式模式if (Regex.IsMatch(input, @"\bexec\s*\(|\bexecute\s*\(|\bselect\b.*\bfrom\b|\binsert\b.*\binto\b|\bdelete\b.*\bfrom\b|\bupdate\b.*\bset\b|\bdrop\b|\balter\b|\btruncate\b", RegexOptions.IgnoreCase)){return true;}// 检查可疑的字符串拼接模式if (Regex.IsMatch(input, @"['""]\s*\+\s*['""]|\bconcat\b", RegexOptions.IgnoreCase)){return true;}return false;}// 更严格的检测方法(可选)public static bool IsStrictSqlInjectionRisk(string input){if (string.IsNullOrWhiteSpace(input)){return false;}// 检查任何看起来像 SQL 语句的模式return Regex.IsMatch(input, @"\b(select|insert|update|delete|drop|alter|truncate|create|exec|execute|declare|fetch|open|close|union)\b.*\b(from|into|set|where|table|database|procedure|function)\b", RegexOptions.IgnoreCase);}
}

使用示例

string userInput = "admin'; DROP TABLE users;--";if (SqlInjectionChecker.IsSqlInjectionRisk(userInput))
{Console.WriteLine("警告:检测到可能的 SQL 注入风险!");// 在这里处理不安全输入,如拒绝请求或记录日志
}
else
{Console.WriteLine("输入看起来是安全的");// 继续处理
}

重要说明

  1. 这不是万无一失的解决方案:没有任何方法可以 100% 检测所有 SQL 注入攻击,此函数只能检测常见的注入模式。
  2. 最佳实践
    • 始终使用参数化查询(如 SqlCommand.Parameters)而不是字符串拼接
    • 实施最小权限原则,数据库用户只应有必要的最低权限
    • 结合其他安全措施,如输入验证、输出编码等
  3. 误报可能性:此函数可能会产生误报(将合法输入标记为危险),特别是在处理包含技术术语的文本时。
  4. 性能考虑:对于高频或大数据量场景,可能需要优化正则表达式性能。
  5. 定期更新:随着新的 SQL 注入技术出现,需要定期更新检测模式。

相关文章:

  • UE5 GAS框架解析内部数据处理机制——服务器与客户端
  • TS04:高性能四通道自动灵敏度校准电容触摸传感器
  • winrar 工具测试 下载 与安装
  • RK3568下QT实现按钮切换tabWidget
  • 嵌套式向量中断控制器(NVIC)
  • 分布式ID生成系统
  • 遨游科普:三防平板是什么?应用在什么场景?
  • get请求使用数组进行传参
  • ffmpeg转码后的视频有横条纹和彩虹横条等乱彩问题
  • MySQL中的Change Buffer是什么,它有什么作用?
  • 什么是5G前传、中传、回传?
  • 本地部署dify+ragflow+deepseek ,结合小模型实现故障预测,并结合本地知识库和大模型给出维修建议
  • 【语音克隆Open Voice的使用】
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.11.25-2024.11.30
  • 20.自动化测试框架开发之Excel配置文件的IO开发
  • 【常忘tag】Python中的元组和列表
  • 如何在VSCode中更换默认浏览器:完整指南
  • 白杨SEO:不到7天,白杨SEO博客网站百度搜索显示和排名恢复正常!顺带说说上海线下GEO聚会分享和播客红利
  • 新一代请求库niquests使用入门
  • CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系
  • 东莞做网站ab0769/合肥网站推广优化
  • 深圳福田网站设计/百度推广助手怎么用
  • 企业网站服务类型/百度输入法免费下载
  • 做网站的公司市场/手机推广软文
  • 咋样查看网站用什么编程语言做的/北京seo工程师
  • 陕西手机网站制作/seo是什么软件