mysql C#中的部分SQL词法分析

a7qyws3x  于 2023-04-19  发布在  Mysql
关注(0)|答案(3)|浏览(150)

我需要解析部分SQL查询(这是一个SQL注入审计工具)。

'1' AND 1=1--

应该分解为令牌,如

[0] => [SQL_STRING, '1']
[1] => [SQL_AND]
[2] => [SQL_INT, 1]
[3] => [SQL_AND]
[4] => [SQL_INT, 1]
[5] => [SQL_COMMENT]
[6] => [SQL_QUERY_END]

他们至少有我所使用的SQL词法分析器吗?或者有任何像野牛for C#这样的好工具吗?(尽管我宁愿不写自己的语法,因为我需要支持MySQL5的大部分语法,如果不是全部语法的话)

0g0grzrc

0g0grzrc1#

似乎有一些好的解析器。
这篇SO文章有一个使用MS的Entity Framework的示例:
Parsing SQL code in C#
似乎有人自己卷了起来,并把它放在代码项目上:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx
就我个人而言,我会选择Entity Framework解决方案,因为它是由MS创建和维护的,但它也因此可能与SQL Server密切相关。因为你正在寻找MySQL,你可能想使用Code Project上的自定义解决方案,因为我相信你可以根据语法要求编写更多自定义解决方案。
我很快就会使用这个(用于Oracle,而不是MySQL),所以请让社区知道这个解决方案是如何工作的!

更新

我刚回到这里,看了评论...经过进一步的思考,我真的推荐ANTLR,因为它支持多种语法。再说一次,我还没有使用过它,所以听听它是如何工作的会很好,这取决于你的决定。
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

bxjv4tth

bxjv4tth2#

也可能有一些方法来利用完全解析(由微软)T-SQL通过数据库版本的Visual studio -
Database Edition产品的皇冠上的宝石是SQL解析器和脚本生成器,这两个部分构成了数据库项目系统内部工作的基础。
http://blogs.msdn.com/b/gertd/archive/2008/08/21/getting-to-the-crown-jewels.aspx

pkwftd7m

pkwftd7m3#

可以使用SqlParser 'Carbunql'获得类似的信息。
https://github.com/mk3008/Carbunql
但是,注解文本将被删除。此外,无法获取令牌的类型信息。

示例

using Carbunql;
using Carbunql.Analysis.Parser;

var w = WhereClauseParser.Parse("'1' AND 1=1--");

foreach (var item in w.GetTokens())
{
    Console.WriteLine(item.Text);
}

结果

where
'1'
AND
1
=
1

相关问题