SQL-инъекции в синтаксисе поиска Sharepoint Enterprise SQL - PullRequest
5 голосов
/ 11 января 2011

Я разрабатываю веб-часть, где пользователи могут вводить поисковую фразу, для которой ищется индекс поиска MOSS. Я использую FullTextSqlQuery класс для поиска.

Когда я создаю свой оператор select, мне, видимо, приходится использовать конкатенацию, чтобы включить в него ввод пользователя. Итоговая оценка должна быть примерно такой:

 SELECT title, author from portal..scope() 
 WHERE ("SCOPE" = 'TheDocuments') 
 AND CONTAINS(MYPROPERTY, 'TheValueThatuserSpecified')

Итак, вопрос в том, как избежать SQL (?) Инъекций из пользовательского ввода? Есть ли какая-то конкретная функция полезности для этого? В проектах php / mysql я бы использовал mysql_real_escape_string. Что-нибудь похожее в пространствах имен SharePoint?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Я не нашел ни одной функции для кодирования пользовательского ввода, поэтому я создал свой собственный метод:

protected override string EncodeUrlParameter(string paramValue)
{
   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < paramValue.Length; i++)
   {
       char c = paramValue[i];
       if (c == '*' || c == '%' || c == '[' || c == ']' || c == '_')
           sb.Append("[").Append(c).Append("]");
       else if (c == '\'')
           sb.Append("''");
       else
           sb.Append(c);
   }
   return sb.ToString();
}

Это в основном используется для параметров, отфильтрованных по ключевому слову LIKE ( страница документациипримечание об этом ).Самое большое, на что я наткнулся, это когда люди пытались включить апострофы в свои запросы.

2 голосов
/ 11 января 2011

Класс FullTextSQLQuery принимает запрос «полнотекстовый sql», который не является истинным sql.«Полнотекстовый sql» анализируется и преобразуется в обычный sql для запроса к таблице в базе данных сервера sql и для запроса к внешнему файлу индекса.Нет никакого способа сделать инъекцию sql через «полнотекстовый sql», он не пройдет проверку.«Имена столбцов», которые вы используете в «полнотекстовом sql», должны быть действительными «управляемыми свойствами», заданными в администрировании поиска, они не указывают на фактические имена столбцов в таблице.http://www.sharepointdev.net/sharepoint--search/is-fulltextsqlquery-protected-against-sql-injection-35184.shtml

...