gpt4 book ai didi

asp.net-mvc - 使用 [HttpPost, ValidateInput(false)] 的 MVC 副作用

转载 作者:行者123 更新时间:2023-12-04 11:26:37 26 4
gpt4 key购买 nike

我的强类型 View 中有一个 TextArea 定义为

@Html.TextAreaFor(x => x.Text)

我的 Controller Action 最初看起来与此类似:
[HttpPost]
public ViewResult Index(MyViewModel vm)
{
using (var db = new MyEntities())
{
Post p = new Post();
p.Text = vm.Text;
db.Posts.AddObject(p);
db.SaveChanges();
}
return View();
}

这工作得很好。用户在 TextArea 中输入的文本被传递到 Controller 并通过 Entity Framework 保存到 SQL Server 中的 Post 表中。该字段的数据类型是 varchar(1000)。 (还有使用带有 [StringLength(1000)] 验证的 MetadataType 对 Text 字段进行模型验证。)

我注意到如果我尝试复制一些 HTML 源并将其粘贴到 TextArea 并提交,我会收到以下错误:

“从客户端检测到潜在危险的 Request.Form 值”

该错误导致我进入 this question ,从那里得到的好处是我可以简单地添加
[HttpPost, ValidateInput(false)]

到我的 Action 来停止这种类型的验证。这非常有效,但令我惊讶的是,无论我尝试将什么放入 TextArea,我都不会造成任何问题。如果我粘贴充满引号字符的 javascript、html 或 T-SQL 语句,它仍然可以正常工作。我看到我输入到 TextArea 的确切字符出现在 SQL 表中,如果我将文本显示回 View ,我在源代码中看到每个字符都转换为 HTML 对应字符,屏幕上的显示看起来就像当我输入它时它确实如此。我没有进行任何类型的文本转换来完成此操作。默认情况下,一切似乎都按照我的意愿工作。当然我很高兴,但是当我读到禁用验证时,通常会伴随着一个警告,你应该理解这样做的后果,而我认为我不知道。所以我想知道,后果是什么?是否有人可能会在我的 TextArea 中输入任何内容,由于禁用输入验证而导致事情变得困惑?

如果相关,我的特定设置是 MVC4、.NET 4.0、Entity Framework 4.4、SQL Server 2012 Express。

最佳答案

如果您使用 Razor ,您输出的任何文本都将自动编码,这些文本将在浏览器中显示为文本,但不会被解释为 javascript 等。

如果您要关闭验证,则必须非常小心,以确保在显示所有用户输入时都对其进行编码,以免由于用户输入的某些内容而无意中在页面上运行了一些 javascript(请查看 XSS 中的一些示例) .

您可以通过向数据库中的各种 varchar 字段添加某种 javascript alert('hello') 调用来快速测试(尽管不是详尽的搜索),并查看它是否在您访问页面时被调用。

此外,即使您没有显示用户数据,它也可能会根据您进行数据访问的方式产生影响。

即使您使用 Entity Framework 之类的东西,例如如果您使用存储过程并且没有对输入进行验证检查,您也不会受到 sql 注入(inject)的保护。参见 Troy Hunt 的 article在这

关于asp.net-mvc - 使用 [HttpPost, ValidateInput(false)] 的 MVC 副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com