2014-10-18 75 views
0

我想知道是否考虑将用户输入编码为数据库的良好做法。将用户输入编码到数据库是否很好?

或者可以不编码为用户输入。

目前我的做法是在输入数据库时​​对其进行编码,并使用Html.DisplayFor来显示它。

+0

经验法则:“编码”信息*当*在上下文中使用*时*如何使用它。 (对于SQL,这是使用占位符,而不是“编码”;然后向HTML发送数据时,确保它正确地使用了HTML转义/“编码”。) – user2864740 2014-10-18 01:21:23

+0

也许我会更加清楚。让用户输入字符串将数据插入数据库之前,将用户输入更改为<b>字符串</b >是不错的做法。 – myfinite 2014-10-18 01:29:57

+1

不是。您必须关心输出到不同目的地的html解码。你想防止SQL注入保护和跨站脚本,但可以通过在数据库中使用参数化查询来缓解这种情况。此外,如果您决定使用中性HTML或脚本标记,则只需要攻击不足标记,而不是两者。它可以中和标签。 – Jason 2014-10-18 01:58:52

回答

1

不可以。您希望保持原始形式的输入,直到您需要并知道输出类型是什么。它现在可能是HTML,但后来如果你想把它改成json,text file,xml等,编码可能会使它看起来不同于你想要的。

所以,首先你要确保你安全地验证你的输入。最好知道每个输入的要求是什么,并验证它们是否具有正确的长度,范围,字符集等。根据您的兴趣,将允许的字符类型限制为有效输入类型的字符。 (如果使用正则表达式验证输入,请确保不要使用易受Regular Expression Denial of Service影响的正则表达式。

在代码中移动数据时,请确保以正确的方式处理数据变成一个Injection Attack

既然你是在谈论一个数据库,最好的做法是使用paramaterized语句。退房预防方法在上面的链接。

然后当谈到输出所使用MVC,如果你不使用RAW或MvcHtmlString函数/调用,则输出将自动编码。使用自动编码,您想要ma确保你使用的是AntiXss编码器,而不是默认的(白名单方法与黑名单)。 Link

如果您使用的是Raw或MvcHtmlString,您希望确保您完全信任这些值(您将它们硬编码)或使用AntiXss编码器类对其进行手动编码。

0

不,不需要编码所有的用户输入,相反如果你想避免脚本注入,你可以尝试验证特殊字符如'<','>','/'等的字段。否则你的Html帮助器方法本身会做需要的。

相关问题