2

我有一个关于 WebMatrix razor (C#) 安全性的简单问题

我(在很短的一段时间内)考虑使用字符检查来帮助验证表单以对抗 SQL 注入,但是,在意识到参数化查询是解决这个问题的最佳方法之后,我已经注释掉了这个看起来像这样的检查:

    foreach(char c in POIName)
    {
        if(c=='\'' || c=='$' || c=='\"' || c=='&' || c=='%' || c=='@' || c=='-' || c=='<' || c=='>')
        {
            errorMessage = "You have entered at least one invalid character in the \"POI Name\" field. Invalid characters are: [\'], [\"], [&], [$], [@], [-], [<], [>], and [%]";
        }
    }

现在,我的问题是:我应该完全删除这样的行,因为它们是不需要的(以允许文本区域中的最大用户自由等),还是应该仍然有一些特定于 WebMatrix 的字符检查(或者不是特定于它)事情)。

也许不允许“@”或“;” 或“<”或“>”??

据我了解,将查询参数化(正如我所拥有的)自动转义有害字符并将整个内容重新包装为字符串(或者无论如何,哈哈),并且我的数据库已被证明不受任何 SQL 注入攻击我已经扔了。

我想我很担心,因为我不确定剃刀是否会受到影响,或者我是否应该担心 XSS(不,我不是博客或任何应该接受 html 标签甚至任何类型的尖括号的东西)。

抱歉,如果这个问题到处都是,但我不知道在哪里可以找到 Stack Overflow 通常提供的确切答案(例如,我相信这个社区比一些谷歌搜索要多得多,这我保证我在发布之前已经尝试过)。

谢谢你的帮助!

4

1 回答 1

4

好的,这里有两点。您正在谈论参与“黑名单”以清除用户输入。更好的方法是“白名单”。定义允许的字符是什么。攻击者可以通过多种方式创造性地绕过快速构建的黑名单。

其次,XSS是一个狡猾的野兽。编码和白名单可以用来对抗它。我建议查看Microsoft 的 Ant-XSS 库以获取建议。但通常,您会想要使用适合您要保护的页面部分的编码。

总之,我能给你的最好建议是熟悉 OWASP,特别是OWASP Top 10。这是保护您的应用程序的绝佳资源。

于 2012-10-10T19:04:13.193 回答