TSql100Parser 检查sql injection
SQL 检查 Injection
2023-09-11 14:14:17 时间
TSql100Parser
[Test]
public void Test20211117_001()
{
var query = "<columns><column name=\"GiftID\" header=\"GiftID\" type=\"asc\"></column><column name=\"GiftName\" header=\"\" type=\"asc\"></column></columns>";
//CheckSQLQuery(query, QueryScopeEnum.OrderBy);
query = "test';WAITFOR DELAY '0:0:5'--";
CheckSQLQuery(query,QueryScopeEnum.Where);
}
private void CheckSQLQuery(string query, QueryScopeEnum scope)
{
if (string.IsNullOrEmpty(query))
{
return;
}
string completeQuery = GetCompleteQuery(query, scope);
if (!string.IsNullOrEmpty(completeQuery))
{
TSql100Parser tsqlParser = new TSql100Parser(true);
IList<ParseError> errors;
var fragments = tsqlParser.Parse(new StringReader(completeQuery), out errors);
var sqlScript = fragments as TSqlScript;
var valid = (errors.Count == 0)
&& (sqlScript != null)
&& (sqlScript.Batches.Count == 1)
&& (sqlScript.Batches[0].Statements.Count == 1)
&& (sqlScript.Batches[0].Statements[0] is SelectStatement);
if (!valid)
{
Console.WriteLine("invalid");
}
}
}
private static string GetCompleteQuery(string query, QueryScopeEnum scope)
{
string completeQuery;
switch (scope)
{
case QueryScopeEnum.Columns:
completeQuery = $"SELECT {query} FROM [NOTEXISTINGTABLE]";
break;
case QueryScopeEnum.OrderBy:
completeQuery = $"SELECT * FROM [NOTEXISTINGTABLE] ORDER BY {query}";
break;
case QueryScopeEnum.Where:
completeQuery = $"SELECT * FROM [NOTEXISTINGTABLE] WHERE {query}";
break;
case QueryScopeEnum.Query:
completeQuery = query;
break;
default:
completeQuery = null;
break;
}
return completeQuery;
}
检查where语句 test';WAITFOR DELAY '0:0:5'--
Expected but did not find a closing quotation mark after the character string '--.
检查orderby语句<columns><column name=\"GiftID\" header=\"GiftID\" type=\"asc\"></column><column name=\"GiftName\" header=\"\" type=\"asc\"></column></columns>
Incorrect syntax near <.
相关文章
- SQL Pretty Printer sql 格式化
- SQL系列教程
- PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
- SQL LAST() 函数
- is-a,has-a,like-a是什么 sql server中,N''表示什么意思? 关于SQL SERVER的N前缀的理解
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
- Sql Server 2008 卸载重新安装失败的解决办法!(多次偿试,方法均有效!)
- SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句及解决方法
- 渗透测试-SQL注入之宽字节注入
- 一款SQL自动检查神器,再也不用担心SQL出错了,自动补全、回滚等功能大全
- 一款 SQL 自动检查神器,再也不用担心 SQL 出错了,自动补全、回滚等功能大全
- 实战案例:Sql client使用sql操作FlinkCDC2Hudi、支持从savepoint恢复hudi作业
- sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符
- SQL Server查看所有表大小,所占空间
- 拉拢Oracle用户:微软向客户提供SQL Server免费授权与培训
- 【bat】sql server在多台服务器上执行SQL脚本
- sql server update与delete引发的死锁
- sql server版本特性简介、版本介绍简介
- 如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?xml执行计划转为图形计划
- sql server维护解决方案(备份、检查完整性、索引碎片整理)
- SQL CHECK sql server免费监控单实例工具
- (4.11)sql server内存使用
- sql语句的优化分析
- SQL Server中用Case When Then多条件判断sql