Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我要在.NET“时手动输入消毒”;“去做吧”;为了我?_.net_Security_Validation_Stored Procedures_Sanitization - Fatal编程技术网

为什么我要在.NET“时手动输入消毒”;“去做吧”;为了我?

为什么我要在.NET“时手动输入消毒”;“去做吧”;为了我?,.net,security,validation,stored-procedures,sanitization,.net,Security,Validation,Stored Procedures,Sanitization,当今最流行的攻击之一是跨站点脚本(XSS),它对应用程序用户的攻击比对应用程序本身的攻击更大,但它仍然利用服务器端应用程序漏洞。结果可能是毁灭性的,并可能导致信息泄露、身份欺骗和特权提升 在阅读该文档之前,我看到了许多关于服务器端消毒/验证输入的建议 嗯,据我所知,使用存储过程(用于DB端)和.NET(用于管理e获取响应)我非常确定 您能否向我展示一个场景,其中存储过程和.NET都可能失败(没有消毒/验证),而我可能“不安全” 正如我所说,我指的是“安全性”,而不是数据的持久性/准确性!我同意对

当今最流行的攻击之一是跨站点脚本(XSS),它对应用程序用户的攻击比对应用程序本身的攻击更大,但它仍然利用服务器端应用程序漏洞。结果可能是毁灭性的,并可能导致信息泄露、身份欺骗和特权提升

在阅读该文档之前,我看到了许多关于服务器端消毒/验证输入的建议

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

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


正如我所说,我指的是“安全性”,而不是数据的持久性/准确性!我同意对输入进行清理…

我知道我的答案引用了java,但我觉得它至少会提供一些上下文(另一个原因是回复很重要,值得评论)为什么我们还需要服务器/客户端输入清理

从您引用的文档中:

String Fields

To validate string fields, such as names, addresses, tax identification numbers, and so on, use regular expressions to do the following:

    Constrain the acceptable range of input characters.
    Apply formatting rules. For example, pattern-based fields, such as tax identification numbers, ZIP codes, or postal codes, require specific patterns of input characters.
    Check lengths.
如果您在客户端/服务器端都没有限制/验证此字符串/类型的长度,那么复杂的攻击者可能会通过提供长字符串输入来破坏您的系统。事实上,这在Java中是一个问题(不确定它是否适用于.NET/IIS,假设这是因为.NET使用哈希代码实现相等,我可能也错了)

这是有趣的,我们几天前在这里


如果可以将字符串大小限制为限制字符。您可以安全地避免这些问题。

如果您将数据传递给标准的.NET Framework对象,则这些对象应自行进行清理。您应该将需要清理的数据视为.NET不知道如何处理的所有数据。i、 e..NET framework不知道其用途的数据

例如,.NET framework将不知道字符串值将用作社会保险号。如果您将此信息直接传递给第三方系统,或者将其存储在数据库中,然后在以后传递,则需要对输入进行清理和验证,以检查社保号码是否符合预期格式。否则,由于第三方系统中存在安全漏洞,您的系统可能容易受到攻击。e、 g.输入的包含某些字符的社会保险号码可能会导致第三方系统崩溃,从而在您的系统尝试与关闭的服务通信时,可能会造成拒绝服务。这种情况只是众多可能性中的一种,它不一定会导致DOS攻击,但最终您会希望验证和清理输入以防范未知

正如您特别提到的XSS,这是一个标准.NET web控件实际上容易受到攻击的漏洞,除非请求验证的默认选项处于活动状态(请参阅)。这是因为.NET web控件在设置文本属性时不会自动对字符进行HTML编码。因此,如果在没有请求验证的情况下运行站点,则应确保所有输出都正确编码(这是一种输出清理形式)。考虑到我会选择使用MVC框架而不是web表单进行开发,因为它可以轻松使用HTML输出清理(例如,使用括号将自动对输出进行HTML编码)。这使您的应用程序能够正确处理输入中输入的恶意(和非恶意)
标记,而无需验证,因为输出已正确清理,因此,如果您的应用程序以这种方式受到保护,则可以禁用请求验证,这是我的首选选项,因为这样您就不会不必要地操纵用户输入。例如,如果对输入进行了消毒并删除了
标记,则我不可能将它们包含在此消息中


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

将输入数据自动化很少是正确的选择。您应该在使用它的地方进行消毒或编码,因为只有在那里您才知道需要编码、转义或删除什么

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

<script>var text="@Model.UserControlledData";</script>
var text=“@Model.UserControlledData”;

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

1-“如果您将数据传递给标准的.NET Framework对象,那么这些对象应该处理自己的清理”我应该调用哪种句柄?或者你的意思是“它自动调用自己的卫生工具”?2-是的,我的意思是“当然”考虑“请求验证”“主动。事实上,如果把它设为false,那会很奇怪:这是一个很好的功能,我不明白为什么要禁用它:)3-说实话,我不知道.NET上的MVC,总是使用Web表单。但是我也知道,在.cs上,.NET会自动编码字段,也就是当字符串已经被编码时(我讨厌这一点;请看这篇文章)4-我认为.NET可以管理单引号和双引号…正确地转义它们。目前没有发现任何问题!(我的意思是,如果我在表单中插入字符串
Hello my name“is”Marco
,并在