c# - 参数化查询后的 WebMatrix SQL 注入(inject)和 XSS 问题

标签 c# security validation razor webmatrix

我有一个简单的问题,涉及 WebMatrix razor (C#) 的安全性

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

    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 的影响我向它发起了注入(inject)攻击。

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

很抱歉,如果这个问题有点普遍,但我不知道还能去哪里找到 Stack Overflow 通常提供的明确答案(例如,我对这个社区的信任远胜于对一些 Google 的信任)搜索,我保证在发布之前已经尝试过)。

感谢您的帮助!

最佳答案

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

其次,XSS是一头狡猾的野兽。可以使用编码和白名单来对抗它。我建议查看Microsofts Ant-XSS Library咨询。但一般来说,您需要使用适合您要保护的页面部分的编码。

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

关于c# - 参数化查询后的 WebMatrix SQL 注入(inject)和 XSS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826020/

相关文章:

asp.net - 无需模拟的 IIS 7.5 集成身份验证 NTFS 文件夹权限

android - 在 Android 中存储 session key

c# - 如何阻止 ValidatesOnNotifyDataErrors 过于活跃

c# - 为什么在 C# 中不允许将此命名函数作为 Func<> 参数传递?

c# - 内部异常不在我的代码中抛出

web-services - Wcf 服务引发异常 : Could not establish trust relationship for the SSL/TLS secure channel with authority

html - 将空的非必填输入字段设为无效

php - Codeigniter csrf 保护,无需表单验证

C#如何判断一个对象是否为多维数组

c# - 如何从 C# 运行 Oracle 函数(对比 2012)