Estoy diseñando un elemento web en el que los usuarios pueden ingresar una frase de búsqueda. Se busca el índice MOSS Search para eso. Yo uso la clase FullTextSqlQuery
para buscar.Inyecciones de SQL en Sharepoint Enterprise SQL sintaxis de búsqueda
Cuando creo mi declaración select
, aparentemente tengo que usar la concatenación para incluir la entrada del usuario en ella. La DECLARACIÓN final debe ser algo como esto:
SELECT title, author from portal..scope()
WHERE ("SCOPE" = 'TheDocuments')
AND CONTAINS(MYPROPERTY, 'TheValueThatuserSpecified')
Por lo tanto, la pregunta es, ¿cómo puedo evitar inyecciones SQL de entrada del usuario (?)? ¿Hay alguna función de utilidad específica para eso? En proyectos de php/mysql usaría mysql_real_escape_string
. ¿Algo similar en espacios de nombres de SharePoint?
Cierto, pero de esta manera el usuario podría ingresar la frase de búsqueda como '') Y CONTIENE (OTRA PERSPECTIVA,' Otro valor) O (ALCANCE = 'OtroEscope'. Esto hace una consulta de búsqueda válida, pero de una manera bastante diferente. El punto es que debe tener en cuenta el escaparse de apóstrofes, comillas, etc. – naivists
El predicado CONTAINS solo funcionará contra propiedades administradas que se hayan habilitado como FullTextQueriable. Además, el marcador recuperable. Este indicador impide que se devuelva el valor de una propiedad administrada si se especifica como columna en la instrucción SELECT. –
Además, los resultados de búsqueda están recortados de seguridad, por lo que incluso si logra ejecutar la consulta inyectada solo obtendrá los resultados a los que normalmente tiene acceso. –