Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sharepoint数据库安全性-SQL注入_C#_Asp.net_Sql_Sharepoint - Fatal编程技术网

C# Sharepoint数据库安全性-SQL注入

C# Sharepoint数据库安全性-SQL注入,c#,asp.net,sql,sharepoint,C#,Asp.net,Sql,Sharepoint,我已经为SharePoint开发了一个自定义web部件,我担心它的安全性。web部件本质上是一个测验框架,它从用户“注册”开始;他们只需输入姓名和电子邮件地址。对于成功的测验,结果被记录在一个列表中,这些注册变量被直接放入列表中 我应该担心SQL注入攻击吗?数据在添加到列表之前是否由SharePoint转义?或者,SharePoint是否在准备好的语句中使用命名参数?或者,它只是一字不差地进行吗 谢谢你的洞察力 更新 我可能应该重新表述一下,我正在将代码插入SharePoint列表,这样它就不会

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

我应该担心SQL注入攻击吗?数据在添加到列表之前是否由SharePoint转义?或者,SharePoint是否在准备好的语句中使用命名参数?或者,它只是一字不差地进行吗

谢谢你的洞察力

更新

我可能应该重新表述一下,我正在将代码插入SharePoint列表,这样它就不会“直接”进入数据库。我不确定当一个项目被插入到一个列表和(我假设)数据库表的某个地方时会发生什么过程(特别是关于安全性)。以下是我正在使用的一些代码:

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

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

您是自己编写SQL的吗?如果不是,我将通过您自己的一些SQL注入攻击来测试它。尝试在名称字段中输入数据,如
John Smith'-
,查看引号和破折号是否在数据库中结束。如果它们没有(或者您根本没有获得任何数据),则可能存在SQL注入漏洞。(请注意,这不是一个详尽的测试-因此不要依赖它)

我假设SharePoint包含针对SQL注入的保护,否则每第二个政府和大型企业站点都将被覆盖。(再想一想,忽略这一点:)


对于跨站点脚本攻击,请尝试以下几种攻击:

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


不过,当向用户显示测验结果时,您确实需要担心XSS之类的问题,因为未经筛选的HTML可以轻松调用SharePoint Web Services/客户端对象模型,并在当前用户的上下文中进行操作。

请显示一些代码。你说“变量被直接放入列表中”-这是怎么发生的?向我们展示将用户输入的值转换为“服务器值”的代码,我们可以为您提供帮助。我通过输入一些破折号、引号和空格进行了测试,它在输入时显示在列表中。问题在于它是如何存储在数据库中的。字符可以正确编码/转义。由于我没有直接访问权限,我明天必须与数据库管理员联系。我一定会报告我的发现。如果网站上显示的东西和你输入的一模一样,在通过数据库后,那么它工作正常。如果SQL注入正在进行,那么您的一些输入将不会进入数据库行,而是做了其他(可能不好的)事情。更重要的是,它如何存储在数据库中并不重要。重要的是(a)它是如何到达那里的,以及(b)当它被检索时它是如何显示的。sql注入没有被写入数据库这一点很好——我最初并不这么认为。
            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();
                }
            }