我已经为 SharePoint 开发了一个自定义 Web 部件,我担心它的安全性。 Web 部件本质上是一个测验框架,首先让用户“注册”;他们只需输入姓名和电子邮件地址。对于成功的测验,结果被记录在一个列表中,那些注册变量被直接放入列表中。

我应该担心 SQL 注入(inject)攻击吗? SharePoint 是否在将数据添加到列表之前对其进行了转义?或者,SharePoint 是否将命名参数与准备好的语句一起使用?或者,它是否只是逐字逐句?

感谢您的任何见解。

更新

我可能应该改写我正在将代码插入 SharePoint 列表,因此它不会“直接”进入数据库。我不确定将项目插入列表和(我假设)某处的数据库表时发生的过程(特别是关于安全性)。这是我正在使用的一些代码:

通过标准 HTML 输入获取用户输入

 output.Write("<div>Please enter your e-mail address</div><div><input type=\"text\" value=\"\" size=\"30\" name=\"takerEmail\"></div>");

这是插入数据的方式
            using (SPSite siteSuccessWrite = new SPSite("http://www.mycompany.com"))
            {
                using (SPWeb webSuccessWrite = siteSuccessWrite.OpenWeb())
                {
                    SPList insertResults = webSuccessWrite.Lists[resultsList];
                    SPListItem quizEntry = insertResults.Items.Add();

                    quizEntry["firstName"] = firstName;
                    quizEntry["lastName"] = lastName;
                    quizEntry["email"] = email;
                    quizEntry["phone"] = phone;
                    quizEntry["department"] = dept;
                    quizEntry["score"] = score;

                    quizEntry.Update();
                }
            }

最佳答案

使用对象模型时,您不必担心 SQL 注入(inject),因为 Sharepoint 会为您处理(它在内部使用参数化存储过程)。

不过,在向用户/法官显示测验结果时,您确实必须担心 XSS 等问题,因为未转义的 HTML 可以轻松调用 SharePoint Web 服务/客户端对象模型并在当前用户的上下文中执行操作。

关于c# - Sharepoint 数据库安全 - SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5332493/

10-17 02:45