在Entity Framework中如何将String转换为FormattableString?
解决方案
方法1:使用FromSqlRaw直接执行拼接后的SQL
EF Core提供了FromSqlRaw方法,它直接接受普通字符串类型的SQL语句,不会对内容做参数化处理,正好满足你需要的SQL注入演示场景:
string query = "SELECT * FROM users WHERE email = '" + email + "' AND password = '" + password + "'"; return RepositoryContext.Users.FromSqlRaw(query).FirstOrDefault();
方法2:手动构造FormattableString(适配FromSql方法)
如果你坚持要使用FromSql方法,可以通过FormattableStringFactory手动创建FormattableString实例,将拼接好的完整SQL作为格式字符串,参数列表设为空数组,这样EF不会进行参数化,直接执行原始SQL:
using System.Runtime.CompilerServices; string query = "SELECT * FROM users WHERE email = '" + email + "' AND password = '" + password + "'"; FormattableString fs = FormattableStringFactory.Create(query, Array.Empty<object>()); return RepositoryContext.Users.FromSql(fs).FirstOrDefault();
⚠️ 注意:以上代码仅用于教学演示SQL注入风险,绝对禁止在生产环境中使用,会导致严重的数据库安全漏洞。
内容的提问来源于stack exchange,提问作者CSNooB
相关产品推荐
相关产品推荐

