我需要解析部分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的大部分语法,如果不是全部语法的话)
3条答案
按热度按时间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
bxjv4tth2#
也可能有一些方法来利用完全解析(由微软)T-SQL通过数据库版本的Visual studio -
Database Edition产品的皇冠上的宝石是SQL解析器和脚本生成器,这两个部分构成了数据库项目系统内部工作的基础。
http://blogs.msdn.com/b/gertd/archive/2008/08/21/getting-to-the-crown-jewels.aspx
pkwftd7m3#
可以使用SqlParser 'Carbunql'获得类似的信息。
https://github.com/mk3008/Carbunql
但是,注解文本将被删除。此外,无法获取令牌的类型信息。
示例
结果