【问题标题】:Checking inputs in c# using regex to prevent injections使用正则表达式检查 C# 中的输入以防止注入
【发布时间】:2016-01-25 12:24:43
【问题描述】:

我正在尝试检查字符串是否有任何类型的注入。 问题是我是新的c#,所以我不知道我是否做得对。

文本可能是以下内容之一:

  • 用户名(英文/希伯来文的数字和字母)。
  • 名字。
  • 地址
  • 说明(带有基本字符的纯文本,例如点逗号等)

这是我到目前为止所做的: https://www.regex101.com/r/tQ0iK1/2

我要做的只是保护我的输入不被注入。 所以如果有其他方法,那就别做了。

如果没有必要使用 c# 保护输入,请原谅我,我来自 Web 开发世界。

提前谢谢:)

【问题讨论】:

  • 注射在哪里?我认为验证用户输入是件好事,但如果你出于安全原因这样做 - 你担心字符串会使应用程序崩溃 - 不是 nessesery
  • 这个问题听起来太笼统了,正则表达式无法检测到姓名或地址,请重新考虑您的要求。
  • 如果我的用户名是';drop tables 和类似的怎么办
  • 您要防范哪些类型的注入?例如,如果您担心 SQL 注入,您应该转义 ' (或阻止它)
  • 是的 SQL,而且大多数情况下,我更喜欢转义而不是阻塞。

标签: c# regex validation input


【解决方案1】:

如果没有必要使用 c# 保护输入,请原谅我, 我来自网络开发世界。

您可以利用内置的 IIS 功能,而不是尝试使用正则表达式来执行此操作。

您可以使用System.webServer 中的security 配置块来处理大部分内容:

例如这将阻止 script>script<

<system.webServer>
   <!-- other blocks -->
      <security>
        <requestFiltering>
          <denyQueryStringSequences>
            <add sequence="script&lt;" />
            <add sequence="script>" />
          </denyQueryStringSequences>
          <verbs />
        </requestFiltering>
      </security>
   <!-- other blocks -->
</system.webServer>

更多关于denyquerystring。这样一来,您的安全就是整个网站的安全,您不必为所有内容滚动代码,并且可以保持代码验证以匹配业务规则。

【讨论】:

  • 我现在正在开发的程序是本地程序。我的意思是我开始在网络上编程。而且我认为也许在 c# 中不需要检查输入(是的,我知道这听起来很荒谬)......
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多