Asp.net mvc 3 我使用Html.Raw()安全吗?

Asp.net mvc 3 我使用Html.Raw()安全吗?,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我有一个电子商务礼品店,在那里用户可以为他们的收件人填写礼品卡 为了填写卡片,我让用户在多行文本框中输入文本 当我在最终审查页面上显示礼品卡时,我必须使用Html.Raw吐出信息,以便正确显示换行符。我正在这样做: @(Model.GiftCard.Text != null ? Html.Raw(Model.GiftCard.Text.Replace(char.ConvertFromUtf32(13),"<br />")) : Html.Raw("")) @(Model.GiftC

我有一个电子商务礼品店,在那里用户可以为他们的收件人填写礼品卡

为了填写卡片,我让用户在多行文本框中输入文本

当我在最终审查页面上显示礼品卡时,我必须使用Html.Raw吐出信息,以便正确显示换行符。我正在这样做:

@(Model.GiftCard.Text != null ? Html.Raw(Model.GiftCard.Text.Replace(char.ConvertFromUtf32(13),"<br />")) : Html.Raw(""))
@(Model.GiftCard.Text!=null?Html.Raw(Model.GiftCard.Text.Replace(char.ConvertFromUtf32(13),“
”):Html.Raw(“”)
我害怕我在用户输入的值上使用Html.Raw进入危险区域。但是,当我返回礼品卡输入页面时,当我尝试执行类似“这是我的礼品卡!(scripttag)alert('test');(/scripttag)”。。。所以我觉得.net会在这段时间内捕获任何恶意条目

我这样做安全吗?看来既然礼品卡输入页面正在运行针对恶意代码的验证,我应该可以稍后使用HTMLAW来显示我自己输入的换行html


(我用上面的(scripttag)东西替换了实际的脚本标记,因此它将显示在stackoverflow中)

在视图模型中使用正则表达式,以确保人们只输入a-Za-z0-9以及您认为应该使用的其他内容,例如:)=]类型的内容。在前端筛选这些内容比在退出时事后猜测要好。

使用
换成标签?这将允许返回以HTML格式显示,而不需要HTML.Raw?

我会在字段上进行验证,将输入限制为可接受的字符和/或对值进行HTML.encode。您是否有示例或链接可以帮助我确保只允许可接受的字符?这不应该是在javascript中(因此,您可以绕过它并发布其他内容吗?)是的,它应该是javascript。是的,这可能就是字段中html.encode的位置,以便处理可能用于注入攻击的字符。我会四处寻找一些可以发布的JS验证。在进行替换之前,您不能显式地对字符串进行HtmlEncode吗?然后,使用Html.raw或创建一个正则表达式就可以非常安全地防止使用<和>,以及数据库可能转换为<或>,或数据库之间的任何字符串转换。。。除了特定的定义良好的值之外,您应该始终禁止所有字符,而不是阻止特定的字符。