Considerações sobre segurança
Para ajudar a proteger aplicativos de banco de dados com base no Sync Framework, recomendamos que você execute as etapas a seguir. Para obter mais informações sobre segurança do banco de dados, consulte os Manuais Online do SQL Server Compact e do SQL Server.
Use o princípio de menos permissão. Não conceda mais permissões do que as necessárias para executar uma tarefa específica. Por exemplo, não conceda permissões INSERT para as tabelas do banco de dados do servidor envolvidas em uma sincronização somente para download. As operações de sincronização exigem as permissões a seguir:
Permissões EXECUTE em todos os procedimentos armazenados que o Sync Framework usa para ler e gravar nas tabelas de metadados e tabelas base.
Permissões SELECT, INSERT, UPDATE e DELETE para tabelas de metadados e todas as tabelas base que serão atualizadas durante uma sessão de sincronização.
Ao provisionar bancos de dados do SQL Server que usam SqlSyncProvider, lembre-se dos seguintes requisitos de permissões para provisionamento:
Permissões CREATE TABLE para permitir a criação de tabelas de metadados: scope_info e scope_config e as tabelas de rastreamento criadas para cada tabela base.
ALTER TABLE para adicionar gatilhos às tabelas base.
Permissões CREATE PROCEDURE para criar os procedimentos necessários ao Sync Framework.
Permissões SELECT e INSERT para as tabelas scope_info e scope_config.
Permissões SELECT para tabelas base.
O Sync Framework não valida o conteúdo dos escopos que definem o conjunto de tabelas a serem sincronizadas (com filtros opcionais). Inclua lógica em seus aplicativos para verificar se o escopo enviado corresponde às tabelas previstas para estarem no escopo e se os filtros previstos foram aplicados.
Configure servidores e bancos de dados do servidor para expor a menor área de superfície ao ataque. Por exemplo, se você usar um servidor IIS (Internet Information Services) como parte de uma arquitetura de N camadas, não habilite o serviço de FTP, a menos que seja exigido por outro aplicativo que use o servidor.
Criptografe ou proteja por senha dados sigilosos no disco e em trânsito. O Sync Framework não fornece criptografia para conexões. A criptografia está disponível no nível de transporte com várias tecnologias. Isso inclui as seguintes tecnologias padrão do setor: Windows Communication Foundation (WCF), Redes Virtuais Privadas (VPN) e os protocolos SSL e IPsec. Recomendamos que você use um desses métodos de criptografia para as conexões feitas durante a sincronização. Para obter mais informações sobre criptografia, consulte a documentação do Windows e do SQL Server Compact, além da documentação do servidor ou banco de dados par que você está usando.
Use procedimentos armazenados em vez do SQL embutido para consultar bancos de dados do servidor. Os procedimentos armazenados ajudam a proteger um aplicativo das seguintes maneiras:
Com os procedimentos armazenados, os administradores podem definir um conjunto conhecido de pontos de entrada para o banco de dados. Os usuários podem obter acesso a procedimentos armazenados e não a tabelas base.
O uso de procedimentos armazenados também incentiva o uso de parâmetros, em vez de consultas criadas dinamicamente. Isso dificulta a execução de ataques de injeção de SQL.
Se um aplicativo estiver comprometido, a lógica de acesso a dados não estará necessariamente comprometida.
Valide os dados enviados durante a sincronização. Use os eventos acionados durante a sincronização para validar as alterações antes de aplicá-las ao banco de dados de destino. Para obter mais informações sobre eventos, consulte Como trabalhar com eventos e com a lógica de negócios do programa.
Estabeleça a confiança entre assemblies locais e remotos em arquiteturas de N camadas. Nos cenários de N camadas, os assemblies locais e remotos devem estabelecer uma relação de confiança entre si. O mecanismo para criar a relação de confiança está fora do escopo da API do Sync Framework e deve ser manipulado pelo seu aplicativo.
Siga estas diretrizes se você usar o WCF (Windows Communication Foundation) para aplicativos de N camadas:
Defina as permissões apropriadas no namespace do WCF que seu serviço usa. Crie um novo namespace ou verifique se o namespace padrão tem o conjunto de permissões apropriadas.
Execute o serviço WCF em uma conta dedicada somente com os privilégios necessário para acessar bancos de dados envolvidos na sincronização e todos os arquivos de spool que são usados quando as alterações de sincronização são colocadas em lote.
Use um pool de aplicativos dedicado para o serviço WCF a fim de isolar os processos de sincronização de qualquer outro serviço em execução no servidor de camada intermediária.
Use a limitação WCF para ajudar a impedir os DOS (ataques de negação de serviço) contra o serviço Web. A limitação controla os recursos que um usuário do serviço pode consumir.
Substitua a reserva WCF URL padrão por uma reserva restrita. Para obter mais informações, consulte este artigo da Microsoft.
Para obter mais informações, consulte a documentação do WCF.
Se o rastreamento for usado, lembre-se de que os arquivos de rastreamento podem incluir informações sobre computadores de servidor e cliente, dados de aplicativos e logons. (As senhas não são gravadas no arquivo de rastreamento.) Se o rastreamento detalhado estiver habilitado, cada linha alterada do banco de dados será gravada no arquivo de rastreamento. Para ajudar a proteger o arquivo de rastreamento, use as listas de controle de acesso apropriadas. Para obter mais informações sobre o rastreamento, consulte Rastreando o processo de sincronização.
Para a sincronização do cliente e do servidor, defina explicitamente a propriedade ClientId no aplicativo do cliente se possível. Se a propriedade não estiver definida, uma ID será atribuída pelo Sync Framework. Nesse caso, o aplicativo cliente deve ser capaz de acessar o seguinte hive do Registro no servidor: HK_CURRENT_USER\Software\Microsoft\Microsoft SQL Server Compact Edition\v3.5. O acesso ao hive do Registro exige direitos de administrador. Isso não é recomendado.
Considere o seguinte se definir filtros para tabelas sincronizadas:
O Sync Framework não valida as cadeias de caracteres SQL especificadas para filtros de escopo. Os desenvolvedores devem aderir às práticas recomendadas específicas para a proteção contra cadeias de caracteres mal-intencionadas. Para obter mais informações, consulte este artigo do MSDN.
Não confie na filtragem de segurança. A capacidade de filtrar com base em uma ID de cliente ou de usuário não é um recurso de segurança. Em outras palavras, essa abordagem não pode ser usada para impedir que um cliente ou par leia dados que pertençam a outro cliente ou par. Esse tipo de filtragem é útil apenas para particionar dados e reduzir a quantidade de dados sincronizada.