汕头网站快速排名,简单大气的科技公司名字,网站开发用了哪些知识要点,石家庄网页设计公司将内插字符串#xff08;Interpolated Strings#xff09;自动地转化为参数化SQL语句#xff0c;这是Entity Framework Core 2提供的一个新特性。虽然该特性从设计上是为了避免出现SQL语句编写上的问题#xff0c;但是有人担心这会导致更多的SQL注入攻击。下面给出一个正确… 将内插字符串Interpolated Strings自动地转化为参数化SQL语句这是Entity Framework Core 2提供的一个新特性。虽然该特性从设计上是为了避免出现SQL语句编写上的问题但是有人担心这会导致更多的SQL注入攻击。下面给出一个正确工作的字符串插值例子var city Redmond;
context.Customers.FromSql($SELECT * FROM Customers WHERE City {city});
SELECT * FROM Customers WHERE City p0a我们对此稍作更改下面的代码就不工作了var city Redmond;
var sql $SELECT * FROM Customers WHERE City {city};
context.Customers.FromSql(sql);
SELECT * FROM Customers WHERE City Redmond这是因为后者将表达式存储在本地变量中这一简单操作完全地更改了代码的行为。为推本溯源我们需要理解C#中“$”表达式的事实真实行为。乍一看表达式仅是将内插字符串转换为一个正常的String.Format调用。但事实上它还做了一些额外的工作。本质上“$”表达式是FormattableString的一个子类。对象中包含字符串格式化表达式以及所有需要填充的值。对象在传递给EF Core的FromSql(FormattableString)方法后会执行必要的替换并得到了参数化的SQL表达式。问题在于编译器并不愿意直接操作FormattableString。除非我们将“$”表达式直接指定为一个FormattableString类型的变量或参数否则表达式将立刻被转换为字符串。在正常情况下这是一种良性更改因为我们希望最终能给出字符串格式。不幸的是在EF Core中会丢失全部有意义的信息Entity Framework使用这些信息对SQL语句参数化。此外一旦发生错误EF Core并不会给出任何编译器告警或是其它的指示信息。因此如果开发人员试图“清理”代码这类软件缺陷就很容易混入到应用中。如要深入了解EF Core使用字符串插值可导致SQL注入攻击这一问题可从GitHub下载Nick Craver给出的“EFCoreInjectionSample”例子代码也可以看一下他发布在ASP.NET Monster上的一个幻灯片名为“EF Core 2.0中的SQL注入攻击”SQL Injection attacks in Entity Framework Core 2.0。原文地址http://www.infoq.com/cn/news/2017/09/EF-Core-2.0-4.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注