[英]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 注入的更多信息, 请参阅此页面。
FromSql和FromSqlInterpolated方法对 SQL 注入是安全的,并且始终将参数数据集成为单独的 SQL 参数。 但是,如果使用不当, FromSqlRaw方法可能容易受到 SQL 注入攻击。 请参阅下面的更多细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.