ASP NET - Disco

Nota : O mapeamento estático de discos de rede deve ser evitado porque quanto mais isolado for o servidor menor é a brecha de segurança em eventuais ataques. Não que evite o ataque mas sim a proliferação de danos.

Para que o usuário acesse o Web Server somos obrigados a dispor o acesso as páginas do web site ao mundo externo, a todos, sem usuários identificados ou uma segurança reforçada. Somos obrigados a expor algumas pastas para que o usuário possa acessar o servidor web e isso é um risco razoável.

Os discos e pastas que são acessíveis no servidor web para um usuário web são as próprias pastas do serviço web publisher, ou seja, somente as pastas destinadas ao servidor Web. Note que o usuário pode fazer um upload de um arquivo mas não tem permissão de executar ou coisa parecida, por este motivo sempre é bom verificar a autenticidade/integridade do arquivo antes de abrir utilizando para isto um bom antivirus ou alguma ferramenta de autenticação. Mas todos sabemos como é fácil inserir um vírus num arquivo texto ou PDF.

Um dos ataques mais comuns é o file upload de arquivos com virus ou com vírus anexado.
Outro ataque muito comum é o de arquivos do Office com macros maliciosas ou mesmo arquivos binários do flash ou java.
O flash foi considerado tão arriscado que foi removido do HTML5.
Recomendo sempre fechar o 'file-upload' a tipos de arquivos com extensões padrão tipo excel, pdf etc. mas não é garantia que não venha vírus mesmo com extensões de arquivos conhecidas ou simplórias.




MapearUnidade

Conecta o servidor a uma unidade de disco de rede. Aconselho a fazer esse mapeamento estático pelo próprio explorer mas há conexões muito exporádicas que precisam deste recurso.

Imports System.IO

Public Class Disco
    Inherits System.Web.UI.Page


    Public Function MapearUnidade(letraDrive As String, Path As String, usuario As String, senha As String) As Boolean

        If (System.IO.Directory.Exists(letraDrive + ":\\")) Then
            DesconectarUnidade(letraDrive)
        End If

        Dim p As System.Diagnostics.Process = New System.Diagnostics.Process()
        p.StartInfo.UseShellExecute = False
        p.StartInfo.CreateNoWindow = True
        p.StartInfo.RedirectStandardError = True
        p.StartInfo.RedirectStandardOutput = True

        p.StartInfo.FileName = "net.exe"
        p.StartInfo.Arguments = "use " + letraDrive + ": " + Path + "" + " " + senha + " /user:" + usuario

        p.Start()
        p.WaitForExit()
        Dim MensagemErro As String = p.StandardError.ReadToEnd()
        Dim MensagemSaida As String = p.StandardOutput.ReadToEnd()

        If MensagemErro.Length > 0 Then
            Throw New Exception("Erro: " + MensagemErro)
            Return False
        Else
            Return True
        End If
        Return False
    End Function

DesconectarUnidade

Remove uma unidade de disco mapeada anteriormente.

    Public Function DesconectarUnidade(LetraDrive As String) As Boolean

        Dim p As System.Diagnostics.Process = New System.Diagnostics.Process()
        p.StartInfo.UseShellExecute = False
        p.StartInfo.CreateNoWindow = True
        p.StartInfo.RedirectStandardError = True
        p.StartInfo.RedirectStandardOutput = True

        p.StartInfo.FileName = "net.exe"
        p.StartInfo.Arguments = " use " + LetraDrive + ": /DELETE"

        p.Start()
        p.WaitForExit()
        Dim Mensagem_Erro As String = p.StandardError.ReadToEnd()
        Dim MensagemSaida As String = p.StandardOutput.ReadToEnd()
        If (Mensagem_Erro.Length > 0) Then
            Throw New Exception("Erro : " + Mensagem_Erro)
        Else
            Return True
        End If
        Return False
    End Function
    
End Class