首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当.NET为我“做”时,我为什么要手动输入?

当.NET为我“做”时,我为什么要手动输入?
EN

Stack Overflow用户
提问于 2012-02-14 16:47:41
回答 2查看 1.4K关注 0票数 0

当今最常见的攻击之一是跨站点脚本(XSS),它更像是对应用程序用户的攻击,而不是对应用程序本身的攻击,但它还是利用服务器端应用程序的漏洞。其结果可能是毁灭性的,并可能导致信息披露、身份欺骗和特权的提升。

阅读文档后,我看到许多关于在服务器端对输入进行消毒/验证的建议,然后再进行管理。

好吧,据我所知,使用存储过程(对于DB端)和.NET (管理e获取响应),我非常肯定。

您能向我展示这样一个场景:存储过程和.NET都可能失败(没有消毒/验证),而我可能“不安全”?

正如我所说,我指的是“安全”,而不是数据的持久性/准确性!在这里我同意消毒输入..。

EN

回答 2

Stack Overflow用户

发布于 2012-02-15 13:22:20

如果您要将数据传递给标准的.NET框架对象,那么这些对象应该处理它们自己的清理过程。您应该将需要清理的数据视为.NET不知道如何处理的所有数据。也就是说,.NET框架不知道它将用于什么的数据。

例如,.NET框架将不知道字符串值将用作社会保险号码。如果您将此信息直接传递给第三方系统,或者直接存储在数据库中,然后在稍后的时间传递,您将需要对输入进行清理和验证,以检查社会保险号码是否符合预期格式。如果不这样做,您的系统就会因为第三方系统的安全漏洞而容易受到攻击。例如,输入了包含某些字符的社会保险号码,可能会导致第三方系统崩溃,而这反过来又会造成拒绝服务,因为系统正试图与已关闭的服务进行通信。这个场景只是许多可能性中的一种,它不一定会导致DOS攻击,但最终您将需要验证和清理输入,以防范未知。

正如您特别提到的XSS,这是一个标准的.NET web控件实际上易受攻击的漏洞,除非请求验证的默认选项是活动的(请参见http://www.asp.net/whitepapers/request-validation)。这是因为在设置.NET属性时,HTML控件不会自动对字符进行编码。因此,如果您在没有请求验证的情况下运行站点,则应该确保所有输出都已正确编码(这是输出清理的一种形式)。考虑到我将使用MVC框架而不是web表单开发的选择,因为它使得使用HTML清理(例如使用<%:%>括号将自动对输出进行编码)变得更加容易。这使您的应用程序能够正确处理输入中输入的恶意(和非恶意) <script>标记,而无需验证,因为输出经过了适当的清理,因此,如果应用程序以这种方式受到保护,则可以禁用请求验证,这是我的首选选项,因为您没有不必要地操作用户输入。例如,如果对输入进行了清理并删除了<script>标记,我就不可能将它们包含在这条消息中。

web应用程序常见的另一种类型是正确格式化将被注入到JavaScript中的字符串(例如单引号和双引号)。简单地说,您是在防范用户通过输入插入恶意JavaScript,该输入将显示给另一个用户,如果没有经过适当的清理,将被执行;执行时,请求将以新用户的身份运行,新用户在应用程序中可能具有更高的安全级别,可能会发生各种损坏。

票数 0
EN

Stack Overflow用户

发布于 2012-02-15 13:58:44

卫生投入很少是正确的选择。您应该在使用它的地方对其进行消毒或编码,因为只有在那里您才知道需要对哪些内容进行编码、转义或删除。

在大多数情况下,当您使用设计良好的API时,手动消毒是不必要的。但是在某些情况下,您仍然需要手动编码或验证,因为您知道的比API更多。例如,如果字符串在嵌入在html页面中的javascript中使用,则自动html编码输出不会保护您。

代码语言:javascript
复制
<script>var text="@Model.UserControlledData";</script>

自动编码规则适合html,而不是javascript字符串,因此这是不安全的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9280758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档