Extensões de nome de arquivo FTP <fileExtensions>
Visão geral
O elemento <fileExtensions>
contém uma coleção de elementos <add>
que especificam extensões de nome de arquivo exclusivas que o IIS permitirá ou negará, dependendo de como cada elemento <add>
é definido. Usando o elemento <fileExtensions>
, você pode ajustar os tipos de conteúdo que seu servidor disponibilizará para clientes FTP.
Por exemplo, se você definir o atributo allowUnlisted como false, todas as solicitações de arquivos com extensões que não estão contidas na lista de extensões permitidas serão negadas. Usando o elemento <clear>
, você pode limpar a lista das extensões de nome de arquivo que já foram definidas e, em seguida, você pode especificar apenas as extensões de nome de arquivo que deseja permitir.
Observação
Quando a filtragem de solicitação bloqueia uma solicitação FTP devido a uma extensão de nome de arquivo negada, o FTP 7 retornará um erro FTP ao cliente e registrará o seguinte substatus exclusivo que identifica o motivo pelo qual a solicitação foi negada:
Substatus FTP | Descrição |
---|---|
11 |
A extensão de nome de arquivo foi negada com base nas regras de filtragem de solicitação |
Esse substatus permite que os administradores FTP analisem seus logs do IIS e identifiquem possíveis ameaças.
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | O elemento <fileExtensions> não foi modificado no IIS 10.0. |
IIS 8.5 | O elemento <fileExtensions> não foi modificado no IIS 8.5. |
IIS 8.0 | O elemento <fileExtensions> não foi modificado no IIS 8.0. |
IIS 7.5 | O elemento <fileExtensions> do elemento <requestFiltering> é fornecido como um recurso do IIS 7.5. |
IIS 7.0 | O elemento <fileExtensions> do elemento <requestFiltering> foi introduzido no FTP 7.0, que foi um download separado para o IIS 7.0. |
IIS 6,0 | O serviço FTP no IIS 6.0 não dá suporte à filtragem de solicitações. |
Observação
Os serviços FTP 7.0 e FTP 7.5 enviados fora de banda para o IIS 7.0, o que exigia o download e a instalação de módulos do seguinte URL:
Com o Windows 7 e o Windows Server 2008 R2, o serviço FTP 7.5 é fornecido como um recurso para o IIS 7.5, portanto, o download do serviço FTP não é mais necessário.
Instalação
Para dar suporte à publicação FTP para seu servidor Web, você deve instalar o serviço FTP. Para fazer isso, execute as etapas a seguir.
Windows Server 2012 R2 ou Windows Server 2012
Na barra de tarefas, clique em Gerenciador do Servidor.
No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
Na página Funções do Servidor, expanda Servidor Web (IIS) e selecione Servidor FTP.
Clique em Próximo e, na página Selecionar recursos, clique em Próximo novamente.
Na página Confirmar seleções de instalação, clique em Instalar.
Na página Resultados , clique em Fechar.
Windows 8 ou Windows 8.1
Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
Expanda Serviços de Informações da Internet e, em seguida, selecione Servidor FTP.
Clique em OK.
Clique em Fechar.
Windows Server 2008 R2
Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.
No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).
No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.
Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, expanda Servidor FTP.
Selecione Serviço FTP.
Clique em Avançar.
Na página Confirmar Seleções de Instalação, clique em Instalar.
Na página Resultados , clique em Fechar.
Windows 7
Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.
Expanda Serviços de Informações da Internet e, em seguida, Servidor FTP.
Selecione Serviço FTP.
Clique em OK.
Windows Server 2008 ou Windows Vista
Baixe o pacote de instalação da seguinte URL:
Siga as instruções no seguinte passo a passo para instalar o serviço FTP:
Instruções
Observação
A Filtragem de Solicitações FTP não tinha uma interface do usuário na versão FTP 7.0; a interface do usuário de filtragem de solicitação FTP foi adicionada na versão FTP 7.5.
Como negar o acesso FTP a uma extensão de nome de arquivo específica
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:
- Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows Vista ou Windows 7:
- Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
- Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, vá para o site ou diretório para o qual você deseja modificar as configurações de filtragem de solicitação.
No painel Página Inicial, clique duas vezes em Filtragem de Solicitações FTP.
No painel Filtragem de Solicitações FTP, clique na guia Extensões de Nome de Arquivo.
Clique em Negar Extensão de Nome de Arquivo... no painel Ações.
Na caixa de diálogo Negar Extensão de Nome de Arquivo, insira a extensão de nome de arquivo que você deseja bloquear. Por exemplo, para impedir o acesso a arquivos com uma extensão de nome de arquivo .inc, digite "inc" na caixa de diálogo.
Clique em OK.
Configuração
O elemento <fileExtensions>
do elemento <requestFiltering>
é configurado no nível global, do site ou URL.
Atributos
Atributo | Descrição |
---|---|
allowUnlisted |
Atributo Boolean opcional. Especifica se o servidor Web deve processar arquivos que tenham extensões de nome de arquivo não listadas. Se você definir esse atributo como true, deverá listar todas as extensões de nome de arquivo que deseja negar. Se você definir esse atributo como false, deverá listar todas as extensões de nome de arquivo que deseja permitir. O valor padrão é true . |
Elementos filho
Elemento | Descrição |
---|---|
add |
Elemento opcional. Adiciona uma extensão de nome de arquivo à coleção de extensões de nome de arquivo. |
clear |
Elemento opcional. Remove todas as referências a extensões de nome de arquivo da coleção <fileExtensions> . |
remove |
Elemento opcional. Remove uma referência a uma extensão de nome de arquivo da coleção <fileExtensions> . |
Exemplo de configuração
O exemplo a seguir ilustra várias configurações relacionadas à segurança no elemento <system.ftpServer>
para um site FTP. Mais especificamente, as configurações <location>
neste exemplo demonstram como:
- Especifique uma regra de autorização FTP para acesso de leitura e gravação para o grupo de administradores.
- Especifique as opções de filtragem de solicitação FTP que negam arquivos *.exe, *.bat e *.cmd.
- Especifique os limites de solicitação FTP para um comprimento máximo de conteúdo de 1000000 bytes e um comprimento máximo de URL de 1024 bytes.
- Bloqueie o acesso FTP ao diretório virtual _vti_bin, que é usado com as Extensões de Servidor do FrontPage.
- Especifique as opções de filtragem de IP FTP que permitem o acesso de 127.0.0.1 e negam o acesso do intervalo de endereços IP 169.254.0.0/255.255.0.0.
<location path="ftp.example.com">
<system.ftpServer>
<security>
<authorization>
<add accessType="Allow" roles="administrators" permissions="Read, Write" />
</authorization>
<requestFiltering>
<fileExtensions allowUnlisted="true">
<add fileExtension=".exe" allowed="false" />
<add fileExtension=".bat" allowed="false" />
<add fileExtension=".cmd" allowed="false" />
</fileExtensions>
<requestLimits maxAllowedContentLength="1000000" maxUrl="1024" />
<hiddenSegments>
<add segment="_vti_bin" />
</hiddenSegments>
</requestFiltering>
<ipSecurity enableReverseDns="false" allowUnlisted="true">
<add ipAddress="127.0.0.1" allowed="true" />
<add ipAddress="169.254.0.0" subnetMask="255.255.0.0" allowed="false" />
</ipSecurity>
</security>
</system.ftpServer>
</location>
Exemplo de código
Os exemplos a seguir especificam opções de filtragem de solicitação FTP que negam arquivos *.exe, *.com, *.bat e *.cmd.
AppCmd.exe
appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.exe',allowed='False']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.com',allowed='False']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.cmd',allowed='False']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.ftpServer/security/requestFiltering /+"fileExtensions.[fileExtension='.bat',allowed='False']" /commit:apphost
Observação
Defina o parâmetro commit para apphost
quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo ApplicationHost.config.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection requestFilteringSection = config.GetSection("system.ftpServer/security/requestFiltering", "Default Web Site");
ConfigurationElement fileExtensionsElement = requestFilteringSection.GetChildElement("fileExtensions");
ConfigurationElementCollection fileExtensionsCollection = fileExtensionsElement.GetCollection();
ConfigurationElement addElement = fileExtensionsCollection.CreateElement("add");
addElement["fileExtension"] = @".exe";
addElement["allowed"] = false;
fileExtensionsCollection.Add(addElement);
ConfigurationElement addElement1 = fileExtensionsCollection.CreateElement("add");
addElement1["fileExtension"] = @".com";
addElement1["allowed"] = false;
fileExtensionsCollection.Add(addElement1);
ConfigurationElement addElement2 = fileExtensionsCollection.CreateElement("add");
addElement2["fileExtension"] = @".cmd";
addElement2["allowed"] = false;
fileExtensionsCollection.Add(addElement2);
ConfigurationElement addElement3 = fileExtensionsCollection.CreateElement("add");
addElement3["fileExtension"] = @".bat";
addElement3["allowed"] = false;
fileExtensionsCollection.Add(addElement3);
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim requestFilteringSection As ConfigurationSection = config.GetSection("system.ftpServer/security/requestFiltering", "Default Web Site")
Dim fileExtensionsElement As ConfigurationElement = requestFilteringSection.GetChildElement("fileExtensions")
Dim fileExtensionsCollection As ConfigurationElementCollection = fileExtensionsElement.GetCollection
Dim addElement As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
addElement("fileExtension") = ".exe"
addElement("allowed") = False
fileExtensionsCollection.Add(addElement)
Dim addElement1 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
addElement1("fileExtension") = ".com"
addElement1("allowed") = False
fileExtensionsCollection.Add(addElement1)
Dim addElement2 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
addElement2("fileExtension") = ".cmd"
addElement2("allowed") = False
fileExtensionsCollection.Add(addElement2)
Dim addElement3 As ConfigurationElement = fileExtensionsCollection.CreateElement("add")
addElement3("fileExtension") = ".bat"
addElement3("allowed") = False
fileExtensionsCollection.Add(addElement3)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var requestFilteringSection = adminManager.GetAdminSection("system.ftpServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions");
var fileExtensionsCollection = fileExtensionsElement.Collection;
var addElement = fileExtensionsCollection.CreateNewElement("add");
addElement.Properties.Item("fileExtension").Value = ".exe";
addElement.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement);
var addElement1 = fileExtensionsCollection.CreateNewElement("add");
addElement1.Properties.Item("fileExtension").Value = ".com";
addElement1.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement1);
var addElement2 = fileExtensionsCollection.CreateNewElement("add");
addElement2.Properties.Item("fileExtension").Value = ".cmd";
addElement2.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement2);
var addElement3 = fileExtensionsCollection.CreateNewElement("add");
addElement3.Properties.Item("fileExtension").Value = ".bat";
addElement3.Properties.Item("allowed").Value = false;
fileExtensionsCollection.AddElement(addElement3);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set requestFilteringSection = adminManager.GetAdminSection("system.ftpServer/security/requestFiltering", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set fileExtensionsElement = requestFilteringSection.ChildElements.Item("fileExtensions")
Set fileExtensionsCollection = fileExtensionsElement.Collection
Set addElement = fileExtensionsCollection.CreateNewElement("add")
addElement.Properties.Item("fileExtension").Value = ".exe"
addElement.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement)
Set addElement1 = fileExtensionsCollection.CreateNewElement("add")
addElement1.Properties.Item("fileExtension").Value = ".com"
addElement1.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement1)
Set addElement2 = fileExtensionsCollection.CreateNewElement("add")
addElement2.Properties.Item("fileExtension").Value = ".cmd"
addElement2.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement2)
Set addElement3 = fileExtensionsCollection.CreateNewElement("add")
addElement3.Properties.Item("fileExtension").Value = ".bat"
addElement3.Properties.Item("allowed").Value = False
fileExtensionsCollection.AddElement(addElement3)
adminManager.CommitChanges()