2012-03-28 35 views
3

我有一个电子商务礼品商店,用户可以为他们的收件人填写礼品卡。我是否安全地使用Html.Raw()?

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

当我在最终评论页面上显示礼品卡时,我必须用Html.Raw吐出信息,以便Newlines正确显示。我这样做:

@(Model.GiftCard.Text != null ? Html.Raw(Model.GiftCard.Text.Replace(char.ConvertFromUtf32(13),"<br />")) : Html.Raw("")) 

我很害怕我进入使用Html.Raw在用户输入的值的危险领土。然而,当我回到礼品卡入口页面时,当我尝试做一些类似“这是我的礼品卡!(scripttag)alert('test');(/ scripttag)”... so我觉得.net会在这一点上捕获任何恶意条目。

我可以安全继续吗?看来,由于礼品卡条目页面正在运行针对恶意代码的验证,我应该稍后使用HtmlRaw来显示我正在放入自己的换行符html ...

(我将实际的脚本标记与此(scripttag)上面的东西,所以它会显示在计算器中)

+0

我会对字段进行验证,将字段限制为可接受的字符和/或对值进行html.encode。 – Brian 2012-03-28 21:08:52

+0

你有一个例子或链接可以帮助我确保我只允许接受字符吗?不会在JavaScript中(因此,你可以绕过它并发布其他东西吗?) – 2012-03-28 21:11:16

+0

是的,它会是JavaScript。是的,可能这就是字段中的html.encode出现的地方,所以可以用于注入攻击的字符被处理。我会挖掘一些我可以发布的JS验证。 – Brian 2012-03-28 21:15:07

回答

2

在您的视图模型中使用正则表达式,以确保人们只输入A-ZA-Z0-9和任何你认为应该使用的东西:) =]类型的东西。筛选这些东西的前端要比在出口的时候猜测它要好。

+0

万无一失或进行正则表达式,防止< and > – 2012-04-07 02:55:11

+0

和任何的,你的数据库可能转换为< or >使用,或之间......你应该总是禁止所有除特定以及任何字符串转换定义的值而不是阻止特定的字符。 – 2015-04-06 22:18:21

0

如何使用 <预> < /预> 标签呢?这将允许返回在HTML中显示而不需要Html.Raw?

相关问题