C# 如果限制输入的最大长度,是否有安全理由验证文本框输入?

C# 如果限制输入的最大长度,是否有安全理由验证文本框输入?,c#,asp.net,C#,Asp.net,因为我对编码还不熟悉,我正试图理解为什么这里有更多关于这个问题的细节 如果您有一个文本框,并且您将输入限制为2个字符,那么您真的需要进一步验证输入吗 我有一个最大长度为2的文本框。是否存在向文本框添加验证程序的安全原因。我应该补充一下,这是在Asp.net中。是的,您仍然必须检查。设置MaxLength属性仅设置输入元素的MaxLength属性;用户可以简单地删除他们正在获取的HTML源中的值,或者通过许多可用工具中的任何一种来“破解”它 您的服务器仍然需要确保只有2个字符,并进行服务器端验证。

因为我对编码还不熟悉,我正试图理解为什么这里有更多关于这个问题的细节

如果您有一个文本框,并且您将输入限制为2个字符,那么您真的需要进一步验证输入吗


我有一个最大长度为2的文本框。是否存在向文本框添加验证程序的安全原因。我应该补充一下,这是在Asp.net中。

是的,您仍然必须检查。设置MaxLength属性仅设置输入元素的MaxLength属性;用户可以简单地删除他们正在获取的HTML源中的值,或者通过许多可用工具中的任何一种来“破解”它

您的服务器仍然需要确保只有2个字符,并进行服务器端验证。

客户端验证程序(如MaxLength)永远不可信,因为您的应用程序的客户端不在您的控制之下。如果你不相信我,看看FireBug可以做些什么来改变FireFox中的HTML


实际上,对于2个字符的字符串,没有多少安全风险,但我会在获取此值时,对字符串的长度进行服务器端验证,并确保它是您期望的长度(如字母数字字符)。

用户可以修改maxlength属性。如果他们禁用/更改
maxlength=“2”
并决定发布3个字符,您的代码可以处理吗?截断它,返回一个错误,但不要仅仅假设它们给了您有效的输入。始终检查。

您是在谈论输入的服务器端验证吗?如果是这样的话,那么您应该进行验证,因为任何人都可以在不通过浏览器的情况下生成HTTPPOST请求,在这种情况下,他们没有2个字符的限制


然而,安全性验证仅仅取决于您将使用给定的输入完成什么。如果您正在使用输入构建数据库查询、发送电子邮件或其他类似内容,那么您应该始终进行验证,与输入长度无关。

验证程序使用javascript运行客户端,因此它们没有任何安全性;他们可以很容易地妥协。它们仅为方便起见,任何用户输入都应出于安全目的在服务器端进行清理。

表单数据可以通过尊重maxlength属性的浏览器以外的方式提交。黑客可能会编写一个脚本,在提交的表单数据不符合您在html或javascript中声明的任何客户端验证规则的情况下,使用您的表单并提交数据。

任何客户端验证的唯一原因(无论是来自javascript、html表单属性还是XForm约束)就是让善意的用户更有可能做正确的事情,而不是输入毫无意义的东西

在服务器端,出于同样的原因,但也出于安全考虑,您必须再次这样做。您不知道客户端验证是否有效,实际上您甚至不知道请求来自浏览器(抓取表单提交,然后使用不同的值重新提交表单只需不到一分钟的时间,如果您试图通过巧妙地了解客户端所看到的内容、使用的nonce等来阻止这种情况,则所需时间不会太长)

接受无效输入的影响可能很小,但考虑到您确实进行了客户端验证,因此如果接收到无效输入,则更有可能是有人出于恶意对您进行了探测(当然,客户端内容中可能存在错误),因此,即使你无法预测接受这些输入会带来什么不良影响,也值得阻止它


这是在考虑SQL注入、XSS或其他攻击是可能的之前。

总是检查服务器上的输入,不管它是否在客户端检查。

对于客户端,设置最大长度就足够了


您提到了asp.net验证程序,如果您正在使用这些验证程序,请将其添加到页面以获得客户端和服务器验证(在本例中,您关心服务器验证)。

那么除了服务器端验证之外,是否还需要在客户端使用asp.net验证程序?设置MaxLength属性,我认为您不一定需要额外的客户端验证,不,完全相同