繁体   English   中英

在实体框架中将字符串转换为 FormattableString

[英]Convert string to FormattableString in Entity Framework

我正在尝试使用 ASP.NET API 构建一个易受 SQL 注入攻击(出于教育目的)的网站。为此,我想使用之前准备好的 SQL 查询调用FromSql

String query = "SELECT * FROM users WHERE email = '"+email
                  +"' AND password = '"+password+"'";
return RepositoryContext.Users.FromSql(query).FirstOrDefault();

但是这段代码不会编译,因为FromSql期望的是FormattableString而不是String 我收到以下错误消息:

错误 CS1503 参数 2:无法从“字符串”转换为“System.FormattableString”

以下将编译,但此代码将不再容易受到 SQL 注入的攻击,因为实体框架将执行准备好的 SQL 查询并将 email 和密码转换为 SQL 查询参数:

return RepositoryContext.Users.FromSql(
   $"SELECT * FROM users WHERE email = {email} 
                           AND password = {password}").FirstOrDefault();

有没有办法将String转换为FormattableString

感谢您的帮助。

您看到的是 Entity Framework 在默认情况下在防止 SQL 注入方面做得很好。

您可以使用FromSqlRaw方法教授 SQL 注入,而不是采用可能被恶意制作的字符串。

另见 Entity Framework Core SQL 查询 → 传递参数文档:

使用 SQL 查询时要密切注意参数化

将任何用户提供的值引入 SQL 查询时,必须注意避免 SQL 注入攻击。 SQL 注入发生在程序将用户提供的字符串值集成到 SQL 查询中时,用户提供的值被设计为终止字符串并执行另一个恶意 SQL 操作。 要了解有关 SQL 注入的更多信息, 请参阅此页面

FromSqlFromSqlInterpolated方法对 SQL 注入是安全的,并且始终将参数数据集成为单独的 SQL 参数。 但是,如果使用不当, FromSqlRaw方法可能容易受到 SQL 注入攻击。 请参阅下面的更多细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM