5

在 asp.net 中处理危险字符的最佳做法是什么?参见示例:asp.net 注册表单

你应该:

  1. 使用 JavaScript 来阻止他们首先将其输入到文本框中?
  2. 具有在服务器端进行查找和替换的通用功能?

#1的问题是它会增加页面加载时间。

4

6 回答 6

9

自 ASP .NET 2.0 起,默认情况下,ASP .NET 会为您处理具有潜在危险的字符。从ASP.NET 中的请求验证

请求验证是 ASP.NET 中的一项功能,它检查 HTTP 请求并确定它是否包含潜在的危险内容。在这种情况下,潜在危险内容是请求的正文、标头、查询字符串或 cookie 中的任何 HTML 标记或 JavaScript 代码。ASP.NET 执行此检查是因为 URL 查询字符串、cookie 或发布的表单值中的标记或代码可能已出于恶意目的添加。

请求验证有助于防止这种攻击。如果 ASP.NET 在请求中检测到任何标记或代码,它会引发“检测到潜在危险值”错误并停止页面处理。

也许最重要的一点是它发生在服务器上。无论客户端访问您的应用程序,他们都不能只使用 JavaScript 来解决它。

于 2013-08-09T14:05:58.687 回答
2

您在写入端像常规字符一样接受它们。渲染时,您对输出进行编码。无论安全性如何,您都必须对其进行编码,以便您可以显示特殊字符。

于 2013-08-09T14:06:16.783 回答
2

解决方案 1 不会大幅增加加载时间。

您应该始终使用解决方案 2 和解决方案 1,因为用户可以在他们的浏览器中关闭 javascript。

于 2013-08-09T14:06:32.690 回答
1

在 asp.net 中处理危险字符的最佳做法是什么?

我没有观看您链接到的截屏视频(无论如何问题应该是独立的),但没有危险人物。这一切都取决于上下文。以 Stack Overflow 为例,它可以让我输入字符Dangerous!'); DROP TABLE Questions--。那里没有什么危险的。

ASP.NET 本身将尽最大努力防止 HTTP 级别的恶意输入:它不会让任何用户访问web.config您的 Web 根目录之外的文件或文件。

一旦开始使用用户输入做某事,这取决于你。没有灵丹妙药,也没有适合所有人的规则。如果要将用户输入显示为 HTML,则必须确保只允许无害的标记标签而没有任何可编写脚本的属性。如果您允许用户上传图片,请确保只上传图片。如果您要将输入发送到 RDBMS,请务必转义对数据库操作语言有意义的字符。

等等。

于 2013-08-09T14:44:49.227 回答
0

始终验证服务器上的输入,这甚至不应该成为讨论,就去做吧!

客户端验证对用户来说只是锦上添花,但服务器才是最重要的!

于 2013-08-09T14:18:08.977 回答
0

这么想

自 ASP .NET 2.0 起,默认情况下,ASP .NET 会为您处理具有潜在危险的字符。来自 ASP.NET 中的请求验证:

就像认为坚固的门可以防贼一样。它不会。只会减慢他的速度。您必须知道最常见的向量是什么以及可能的解决方案是什么。您必须理解,您在 HTML/CSS/Javascript 中编写的每一个变量(字段/属性)都是必须清理的潜在攻击媒介(通过使用适当的库,例如较新的 MVC.NET 中包含的一些方法,或者至少<%: %>是 ASP.NET 4.0 的),没有例外,每个 EVERY EVERY您执行的查询是一个潜在的附加向量,必须通过独占使用 ORM 和参数化查询来清理,没有例外。数据库中不得保存密码。还有很多其他类似的东西。这不是很困难,但是懒惰、自满、无知会使它变得更难(如果不是几乎不可能的话)。如果不是你会引入这个洞,那么它是你左边的程序员,或者你右边的程序员。没有希望。

于 2013-08-09T14:32:51.647 回答