CSN*_*ooB 7 c# entity-framework asp.net-web-api formattablestring
我正在尝试使用 ASP.NET API 构建一个容易受到 SQL 注入攻击(用于教育目的)的网站。为此,我想FromSql
使用之前准备好的 SQL 查询进行调用,如下所示:
String query = "SELECT * FROM users WHERE email = '"+email
+"' AND password = '"+password+"'";
return RepositoryContext.Users.FromSql(query).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但这段代码不会像FromSql
预期的那样编译FormattableString
,而不是 a String
。我收到以下错误消息:
错误 CS1503 参数 2:无法从“string”转换为“System.FormattableString”
下面的代码可以编译,但是此代码将不再容易受到 SQL 注入的攻击,因为实体框架将执行准备好的 SQL 查询并将电子邮件和密码转换为 SQL 查询参数:
return RepositoryContext.Users.FromSql(
$"SELECT * FROM users WHERE email = {email}
AND password = {password}").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
有没有办法将 a 转换String
为 a FormattableString
?
感谢您的帮助。
小智 11
使用 System.Runtime.CompilerServices;
...
var s = "...";
var fs = FormattableStringFactory.Create(s);
Run Code Online (Sandbox Code Playgroud)
您看到的是实体框架默认在防止 SQL 注入方面做得很好。
\n您可以使用FromSqlRaw方法来教授 SQL 注入,该方法采用可能被恶意制作的字符串。
\n另请参阅实体框架核心SQL 查询 \xe2\x86\x92 传递参数文档:
\n\n\n使用SQL查询时要密切注意参数化
\n将任何用户提供的值引入 SQL 查询时,必须小心避免 SQL 注入攻击。当程序将用户提供的字符串值集成到 SQL 查询中,并且精心设计用户提供的值以终止该字符串并执行另一个恶意 SQL 操作时,就会发生 SQL 注入。要了解有关 SQL 注入的更多信息,请参阅此页面。
\nFromSql和FromSqlInterpolated方法可以安全地防止 SQL 注入,并且始终将参数数据集成为单独的 SQL 参数。但是,如果使用不当, FromSqlRaw方法可能容易受到 SQL 注入攻击。请参阅下面的更多细节。
\n
归档时间: |
|
查看次数: |
4409 次 |
最近记录: |