我们有一个。NET 4.0项目,正在被Veracode扫描,以便获得安全认证。
报告详细文件&行号似乎是指Dapper:
ourowndll.dll dev/.../dapper net40/sqlmapper.cs 1138
app_browsers.dll dev/.../sqlmapperasync.cs 126
我想知道是否有任何方法可以防止这种漏洞。
我不熟悉VeraCode,然而正如@Kristen Waite Jukowski指出的那样,您的问题可能是由于您的一些查询没有参数化,在这种情况下,它们被正确地识别为容易受到SQL注入的攻击。
或者,一个类似的问题(与相同的问题有关,但与OrmLite)可能会对此有所了解。与OrmLite类似,由于dapper提供了编写原始SQL查询的工具,这些查询可以由未参数化的输入组成(例如,通过字符串连接),因此使用它可能被认为是一个漏洞,即使特定项目中的每个查询目前都是完全参数化的。这个问题的答案(在您的情况下可能不可行)是用实体框架取代现有的ORM:
在使用VeraCode读取代码期间,建议的正确补救措施是用EntityFramework 6.1替换ServiceStack ORM。
从该问题中的评论来看:
不同之处在于EF中,执行上下文实现IDbCommand,但CreateDataAdapter和其他允许动态sql抛出异常的API已经实现。EF中没有允许动态sql的代码路径,而不首先通过类似于OWASP的过滤机制。