Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе рассматриваются проблемы безопасности в LINQ to DataSet.
Передача запроса в недоверенный компонент
Запрос LINQ to DataSet можно сформулировать в одной точке программы и выполнить в другой. В точке, в которой создается запрос, запрос может ссылаться на любой элемент, видимый на этом этапе, например частные члены класса, к которому принадлежит вызывающий метод, или символы, представляющие локальные переменные или аргументы. Во время выполнения запрос сможет получать доступ к тем членам, на которые он ссылается при формулировке, даже если вызывающий код не имеет к ним доступа. Код, выполняющий запрос, не имеет произвольной добавленной видимости, в том, что он не может выбрать, к чему нужно получить доступ. Он сможет получить доступ строго к тому, к чему обращается запрос, и только через сам запрос.
Это подразумевает, что, передавая ссылку на запрос другому фрагменту кода, вы доверяете компоненту, принимающему запрос, доступ ко всем публичным и приватным членам, к которым обращается запрос. Как правило, запросы LINQ to DataSet не должны передаваться ненадежным компонентам, если запрос не был тщательно создан, чтобы он не предоставлял информацию, которая должна храниться в закрытом режиме.
Внешние входные данные
Приложения часто принимают внешние входные данные (от пользователя или другого внешнего агента) и выполняют действия на основе этого ввода. В случае LINQ to DataSet приложение может сформировать запрос определенным образом, опираясь на внешние входные данные или используя их в запросе. Запросы LINQ to DataSet принимают параметры везде, где принимаются литералы. Разработчики приложений должны использовать параметризованные запросы, а не внедрять литералы из внешнего агента непосредственно в запрос.
Любые входные данные, непосредственно или косвенно производные от пользователя или внешнего агента, могут содержать содержимое, которое использует синтаксис целевого языка для выполнения несанкционированных действий. Это называется атакой внедрения SQL, получившей своё название по шаблону атаки, где целевым языком является Transact-SQL. Входные данные пользователя, введенные непосредственно в запрос, используются для удаления таблицы базы данных, причинения отказа в обслуживании или изменения характера выполняемой операции. Хотя композиция запросов возможна в LINQ to DataSet, она выполняется через API объектной модели. Запросы LINQ to DataSet не создаются с помощью строковых манипуляций или объединения, так как они находятся в Transact-SQL и не подвержены атакам внедрения SQL в традиционном смысле.