当前位置: 首页 > 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 注入技术出现,需要定期更新检测模式。
http://www.xdnf.cn/news/523801.html

相关文章:

  • 关于能管-虚拟电厂的概述
  • Win10 安装单机版ES(elasticsearch),整合IK分词器和安装Kibana
  • 【android bluetooth 协议分析 01】【HCI 层介绍 8】【ReadLocalVersionInformation命令介绍】
  • 【Android构建系统】Soong构建系统,通过.bp + .go定制编译
  • MySQL 故障排查与生产环境优化
  • verify_ssl 与 Token 验证的区别详解
  • Node 服务监控及通过钉钉推送告警提醒
  • 3.安卓逆向2-安卓文件目录
  • WPF点击按钮弹出一个窗口
  • 深入理解 Hadoop 核心组件 Yarn:架构、配置与实战
  • 物联网简介:万物互联的未来图景
  • Eclipse Java 开发调优:如何让 Eclipse 运行更快?
  • Spring Cloud Seata 深度解析:原理与架构设计
  • 甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
  • java中如何优雅处理多租户系统的查询?
  • Hexo的Next主题的Config文件内方便修改的参数(Chat-Gpt)
  • 多线程进阶
  • java每日精进 5.19【Excel 导入导出】
  • 使用Python将 Excel 中的图表、形状和其他元素导出为图片
  • YouTube视频字幕转成文章算重复内容吗?
  • FD+Mysql的Insert时的字段赋值乱码问题
  • ffmpeg 把一个视频复制3次
  • java配置webSocket、前端使用uniapp连接
  • 【git config --global alias | Git分支操作效率提升实践指南】
  • 开源音视频转文字工具:基于 Vosk 和 Whisper 的多语言语音识别项目
  • 数据分析与应用---数据可视化基础
  • 精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
  • 【three】给立方体的每个面加载不同贴图
  • 【工具】ncdu工具安装与使用指南:高效管理Linux磁盘空间
  • javaScript学习第三章(流程控制小练习)