我可以访问没有直接

问题描述:

引用的库我下面这个教程对我来说,熟悉ASP.NET核及其他相关技术。 https://www.codeproject.com/articles/997216/restful-day-sharp-resolve-dependency-of-dependenci我可以访问没有直接

他提到,引用DataModelWebApi项目是不是出于安全原因,一个很好的做法。所以,我没有跟他和我的惊喜,我仍然可以只是通过Services间接引用它的访问类的DataModelWebApi项目。

下面的屏幕截图将显示项目的关系是(从教程)更加清晰。

https://www.codeproject.com/KB/aspnet/990492/image028.jpg

而且在我的下面WebApi的项目我的实际引用。

WebApi's references

我还是很新的.NET和想知道这是否是预期的行为或者这可能会导致任何安全隐患。

这是预期的行为?

是的。这就是所谓的transitive dependency。您的项目可以引用其依赖项引用的包,就好像该项目本身依赖于这些包。这是预期的行为;请参阅:Transitive references in .Net Core 1.1

这会导致任何安全风险吗?

不可能。您不应该依赖软件包依赖关系规则来保证您的代码安全。相反,请确保您的代码在编写时考虑到安全性 - 始终清理用户输入,使用参数化查询,在服务器端强制执行授权等等。

我应该依靠传递依赖?

您的应用程序/库不应该依赖传递依赖,因为他们可以在你消失了,没有任何警告(如果你的依赖关系中的一个改变依赖)。相反,请明确指出您的代码需要依赖的任何包到适当的依赖项中。

+1

这绝对回答了我的问题,尽管我仍然半心半意,我应该如何看待这个问题,因为它看起来很不错,我猜很乱?无论如何,谢谢你的回答!现在我会更多地了解我知道用于此行为的“传递”术语。 :) – Lawrence

+0

@劳伦斯我同意,它可能不是_insecure_本身,但它很混乱。我会用更多的颜色更新我的答案。很高兴它有帮助。 :) –

+1

_您的应用程序/库不应该依赖传递性依赖关系_问题是Visual Studio会高兴地建议使用传递性依赖性类型,而没有任何警告说它们是在间接依赖项中定义的,您无法知道这一点。你应该意识到你正在做的是通过注意到在文件顶部出现“不正确”的“使用”(即除非类型存在于已经使用过的命名空间的“扩展名”中,那么你运气不好)。 – Albireo