我想知道将用户输入编码到数据库是否是一种好的做法。
或者可以改为不编码为用户输入。
目前我的做法是在输入数据库时对其进行编码,并使用Html.DisplayFor来显示它。
答案 0 :(得分:1)
没有。您希望将输入保持为原始形式,直到您需要它并知道输出类型是什么。它现在可能是HTML,但是如果您想将其更改为json,文本文件,xml等,编码可能会使它看起来与您想要的不同。
因此,首先您要确保安全地验证您的输入。最好知道每个输入的要求是什么,并验证它们是否具有正确的长度,范围,字符集等。您可以将限制允许的字符类型限制为有效。输入类型的字符。 (如果使用正则表达式验证输入,请确保不要使用易受Regular Expression Denial of Service影响的正则表达式。
在代码中移动数据时,请确保以不会变成Injection Attack的方式正确处理数据。
由于您在谈论数据库,最佳做法是使用参数化语句。查看以上链接中的预防方法。
然后当使用MVC输出时,如果您没有使用RAW或MvcHtmlString函数/调用,则输出会自动编码。使用自动编码,您需要确保使用AntiXss编码器而不是默认(白名单方法与黑名单)。 Link
如果您使用的是Raw或MvcHtmlString,则需要确保完全信任这些值(您将其硬编码)或者使用AntiXss Encoder类手动编码它们。
答案 1 :(得分:0)
不,没有必要对所有用户输入进行编码,而是如果您想要避免脚本注入,我尝试验证特殊字符的字段,例如'<','' ;>',' /'等等。否则你的Html助手方法本身就能做到。