Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 08/17/2021 in all areas

  1. Olá boa tarde, Disponibilizei uma aplicação funcional no GitHub. Nota: esta aplicação deverá ser "vista" como ponto de partida.
    5 points
  2. Erros comuns e resoluções 1 - Erro 5000 Problema xml mal formatado (arranjem outro modelo) algures acima postei o meu que funciona. 2 - Erro "Connection reset by peer in connection to servicos.portaldasfinancas.gov.pt:722" ou "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host." dependendo da plataforma que usam Problema Certificado TesteWebservices.pfx errado ou estão a enviar o certificado errado ou não têm os canais tls activados atualizem o ficheiro TesteWebservices.pfx e usem o terceiro certificado os outros sao Root e intermedio, Se não sabem enviar junto o root e o intermedio instalem o certificado no windows. 3 - Erro 4043 - "O NIF do cliente para o qual está a registar a serie não possui atividade aberta." ou Problema a verificar a identidade dos contribuintes realmente pode estar a acontecer, 😀, não usem 599999993/37, não funciona. usem o user real com autorização de WSE - Comunicação e Gestão de Séries por webservice. Espero que sirva de ajuda para alguém.......
    3 points
  3. Não... continua o erro "4043 - O NIF do cliente para o qual está a registar a serie não possui atividade aberta." Isto no serviço "registarSerie"
    3 points
  4. Resposta da AT Estando a FAQ já disponível, não me parece que a AT vá alterar o que quer que seja... FAQ: https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/questoes_frequentes/Pages/faqs-00883.aspx No entanto, eis a minha resposta
    3 points
  5. Atenção a 4 pormenores! 1) O maxLength da SÉRIE continua limitado a 20 caracteres (ao contrário do que diz a documentação) 2) O numCertSWFatur NÃO É VALIDADO pelo serviço, pelo que é aceite qualquer número (aqui a AT deveria validar a associação do NIF do produtor aos numCertSWFatur que o mesmo detém...) 3) O CÓDIGO de VALIDAÇÃO da SÉRIE não está a ser devolvido como descrito nas FAQ, que diz "Relativamente ao formato, o código é alfanumérico, com consoantes maiúsculas e algarismos (excluindo o zero “0” e um “1”). É desejável que os meios de processamento implementem validações que previnam erros de digitação na inserção manual do código na configuração das séries, nas situações em que o código seja obtido manualmente no Portal das Finanças." As consoantes não incluem as VOGAIS (A, E, I, O, U) mas afinal para a AT incluem (tinha escrito o algoritmo de validação de acordo com as FAQ) 4) O CÓDIGO de VALIDAÇÃO da SÉRIE já está a ocupar 10 caracteres (a documentação diz que nunca será inferior a 8, mas não seria espectável começar já em 10)
    2 points
  6. A AT, na página de testes de webservices, já adicionou testes para o serviço de comunicação de série.
    2 points
  7. Não. Dá sempre esse erro. Se repetires o pedido aparece a mensagem a indicar que a série já está inserida. Mas como também não se consegue o usar o método "consultarSerie" e o "anularSerie" requer um código que o "registarSerie" não devolve, pouca mais há a programar, para já 😕 Estou a aguardar resposta à exposição que fiz à AT.
    2 points
  8. Lembro que neste exemplo apresentado podes evitar o "FA1-" na Série, pois se utilizam o ano como Série, basta criarem variáveis do ano em cada Série e o problema fica resolvido ( 2021, 2021A 2021-1, etc ) Fui eu que efetivamente mencionei que alteramos o nosso software de forma a colocar o CID no Série, mas apenas quando o Software é instalado de base, e os documentos standards são criados de forma automática mas apenas para evitar logo à partida existirem Séries repetidas no mesmo Tipo de Doc. No nosso caso o Campo Série fica livre para alterações pelo cliente final até emitir o 1º Documento, depois disso não não pode mais alterar a Série. Por outro lado, e referente à parte estética, a Impressão do CID do documento não é obrigatória apenas tem de ser mencionada no SAFT, assim mesmo que se use o CID na Série, a impressão não fica estranha, conforme alguns exemplos: Usando o CID como Série: FT CID/1002 FR CID/2500 ND CID/3100 NC CID/5560 Não usando o CID como Série: FT 2021/1234 FT 2021A/4567 FT 2021-B/9876 Inicialmente imprimia-mos o CID em todos os Documentos, só depois nos apercebemos que as Grandes Software-Houses não o faziam, assim como não o fazem grandes empresas como a Via Verde, EDP, Vodafone, JP-DI, CPC-DI, só para mencionar alguns casos que por acaso neste momento tenho documentos das mesmas na minha frente. Todos imprimem: Tipo de Documento, ESPAÇO, e depois a habitual concatenação da Série, /, e por fim o sequencial Informo também que o nosso Software já foi Certificado com esta formatação na impressão de documentos. Assim, para quem se preocupar mais com a parte estética, pode evitar a impressão do CID antes da Série, e trocar o CID pelo Tipo de Documento.
    2 points
  9. Actualizei o projecto de teste para comunicação de séries. Agora está funcional para quem quiser testar: https://easyupload.io/3hu5th É criado um ficheiro (soapAT.log) com o xml enviado e recebido para poderem confirmar se os dados estão a ser enviados correctamente. Se der erro de ligação têm de instalar o certificado (pfx) da AT no pc: https://support.globalsign.com/ssl/ssl-certificates-installation/import-and-export-certificate-microsoft-windows Obrigado ao @joaquim vilasboas e @MrFroggy pela ajuda.
    2 points
  10. Eu entendo que a factura electrónica OBRIGATÓRIA fica adiada, com este despacho, para 2022. A espap e os outros brokers podem, e continuam os processos de adesão e recepção. E acho muito bem e o pessoal deve aproveitar este prazo para colocar em funcionamento. Mas até 1 Janeiro de 2022 NÃO É OBRIGATÓRIO! Ate porque pelo feedback dos clientes nenhuma das entidades publicas está a exigir a comunicação OBRIGATÓRIA de Facturas Electrónicas. Acho que alguns ainda nem sequer contrataram brokers...
    2 points
  11. A AT já explicou a razão: - Como as séries também passam a ser obrigatórias em máquinas de faturação ( balanças, kioskes, etc ) onde não existe Código Interno do documento, a única forma que eles encontraram para poderem implementar o ATCUD foi nao permitirem séries repetidas em tipos de documentos iguais ( FT, FR, FS ND, NC, etc ) De forma a evitar logo na criação de documentos novos a duplicação de séries, nos passamos a colocar automaticamente o Código Interno do documento como Série, claro, depois o cliente pode trocar desde que ainda nao tenha iniciado a Série, e se o cliente por distração tentar criar uma série já em uso, será o próprio Webservice da AT devolver erro no pedido de registo Todas as séries já em uso vão continuar a ser usadas sem qualquer problema ( depois de registadas na AT ) é só as que estáo repetidas no mesmo Tipo de Documento terão de ser encerradas a criadas novas isto não tem de ser feito no dia 1 de janeiro, já podemos começar a analisar se existem repetições, fechar as mesmas, criar novas, assim evitando Stress de última hora Por conta disso já libertamos uma nova versão que a partir deste momento já controla séries repetidas e informa o cliente que deve fechar as repetidas e criar novas
    2 points
  12. Caros, Decidi enviar este post para aqueles que estão a programar em C# e estão a obter o erro: "The underlying connection was closed: An unexpected error occurred on a send." Este problema é derivado do certificado PFX está a ser enviado corretamente ou algum problema na ligação SSL. Como já foi dito anteriormente, dizia-se que era necessário ativar o TSL 1.1 ou TSL 1.2. Mas após várias horas de depuração, cheguei a conclusão que isso não é necessário, o servidor da AT tem auto negociação e aceita todas as versões de TSL. Foi dito também que em algumas situações é necessário instalar o certificado PFX no Windows. Igualmente, após várias horas de depuração, cheguei a conclusão que isso também não é necessário. Para resolver estes problemas, precisam de reparar que o ficheiro PFX não possui somente 1 certificado mas sim uma cadeia de certificados! Então, ao invés de utilizarem: X509Certificate2 cert = new X509Certificate2(); cert.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet); request.ClientCertificates.Add(cert); Devem utilizar: X509Certificate2Collection certCollection = new X509Certificate2Collection(); certCollection.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet); request.ClientCertificates = certCollection; Esta simples alteração resolveu todos os problemas de comunicação com a AT.
    2 points
  13. FAQ da secção GNU/Linux – apoio ao newbie Antes de mais, com estas FAQ da secção Linux pretendemos satisfazer num só thread as perguntas mais óbvias feitas por qualquer desconhecedor do mundo Linux e de todos os seus aspectos. Será para sempre um trabalho inacabado, sempre passível de ser melhorado. Para tal, conto com a ajuda da LinTeam bem como de todos vocês, visitantes da nossa secção. Espero que possam encontrar aqui a solução para os vossos problemas. Caso não encontrem façam um thread normal na secção com a vossa dúvida, referenciando, aqui ou lá, essas mesmas falhas de conteúdos que as FAQ possam ter. Apertem o cinto, e preparem-se para ver todas as vossas questões solucionadas... Índice 1. Antes de instalar ou experimentar O que é o GNU/Linux? Ouvi dizer que tudo no mundo GNU/Linux é grátis, é verdade? Quais são as vantagens destes sistemas operativos? O que é uma distribuição? Em que diferem as distribuições, qual escolher? Quero mudar para GNU/Linux, mas terei depois todos os programas que preciso, incluído os jogos que tanto gosto? É difícil mexer em distribuições de GNU/Linux? É possível experimentar estes sistemas operativos sem compromisso? É possível ter Windows e Linux a correr no mesmo pc? Onde arranjar as distribuições de GNU/Linux? Como verificar a integridade da distribuição descarregada? Quais os passos prévios a fazer antes de se instalar uma distribuição de GNU/Linux? Como instalar? 2. Após a instalação Como descompactar os formatos mais conhecidos de arquivo? Como instalar programas em sistemas GNU/Linux? Não sei usar a consola, que comandos usar? Como editar as permissões dos ficheiros por consola? Como agendar tarefas? 3. Referências Nota Importante: o sudo é o comando usado para ganhar privilégios de super-utilizador (root), mas não é usado em todas as distribuições, pelo que se na vossa distribuição vos der um erro com este comando, devem executar su e ficar como root, e só depois executar os comandos sem sudo. 1. Antes de instalar ou experimentar 1.1. O que é o GNU/Linux Linux é apenas um núcleo – kernel – baseado no antigo Unix (sistema operativo desenvolvido pela AT&T nos anos 70), englobado por todo um ambiente gráfico e programas que diferem de sistema operativo GNU/Linux, para sistema operativo. No entanto, a base, ou seja, o kernel, é sempre o mesmo. Este resultou da proposta feita por Linus Torvalds à comunidade cibernética em Agosto de 1991, onde pedia feedback sobre um sistema operativo que este estava a desenvolver baseado no Unix. Ao projecto foram-se juntando progressivamente milhares de pessoas, acabando Linus por só ter criado o kernel do sistema, devendo-se tudo o resto à cooperação de milhares de programadores de todo o mundo, e à aliança com o projecto GNU. Aos poucos foram portanto surgindo os primeiros sistemas operativos GNU/Linux. Usa-se a referência GNU aliada a Linux, devido a este ser um projecto anterior ao Linux (de 1984) que tinha como objectivo a criação de um sistema operativo gratuito, open source e funcional, fruto da ideia de Stallman (http://www.gnu.org/). A este projecto acaba por aliar-se o kernel desenvolvido por Linus (última grande peça que faltava ao GNU para poder surgir como SO), tendo como resultado as primeiras distribuições GNU/Linux. Aquilo que muitos hoje designam por Linux, querendo designar o sistema operativo é errado, o correcto é GNU/Linux, pois todo o sistema é GNU, Linux é só o kernel, ou seja a base - núcleo interno. Richard Stallman explica: 1.2 Ouvi dizer que tudo no mundo GNU/Linux é grátis, é verdade? Nem sempre. Ser livre/código aberto não significa gratuito. Se bem que grande parte o é. Quando falamos em free software ou free and open source software, estamos sempre a referir-nos a liberdade (free as in freedom) e não preço (free as in free beer). Se for software não livre distribuído gratuitamente, esse software tem a designação de freeware e não free software. O movimento de software livre levado a cabo por Richard Stallman (criador da FSF e do sistema GNU) não está contra a venda de software, aliás isso está mais que explicito aqui: http://www.gnu.org/philosophy/selling.html. Está sim contra o desenvolvimento de software não livre (proprietário) quer seja gratuito ou não. 1.3. Quais são as vantagens destes sistemas operativos? Bem, as vantagens são bastantes e podem ser encontradas em diversos sites, no entanto deixo aquilo algumas das mais importantes. Segurança: Um sistema operativo GNU-Linux tem uma arquitectura que só por si já garante uma segurança muito maior do que em certos sistemas operativos proprietários e pagos, através, por exemplo, do sistema de permissões. De qualquer maneira, o facto de todo o código ser OpenSource, tendo sempre por trás uma comunidade muita activa, permite que quaisquer erros encontrados nos sistemas possam ser identificados e solucionados em muito pouco tempo, muitas vezes com soluções dadas pelos próprios utilizadores que reportaram o problema. Ainda assim, como em todo o software, é sempre possível have falhas. Flexibilidade: Diz-se que é raro haver dois sistemas Linux iguais, e é verdade. Isto é devido à sua elevada personalização e flexibilidade. Ou seja, qualquer um pode alterar e distribuir o código fonte conforme as suas necessidades, factor que influenciou na grande evolução deste sistema operativo. Fiabilidade: Prima por ser dos sistema operativos mais estáveis, com menos falhas, e que poucos recursos consome da máquina (comparativamente a outros SOs). Como tal obtêm-se melhores desempenhos em programas que muito provavelmente noutros sistemas tinham resultados piores. É bastante indicado para computadores mais modestos, sem nunca pôr de lado todas as características anteriores. Economia: Como é bom não estar preso a licenças, como é bom poder usar algo que é livre, e geralmente grátis. Assim, é bastante rentável ter um PC com Linux como sistema operativo, pois obtêm-se tudo o que estamos habituados tanto num desktop caseiro, como num servidor, a custo 0. Multiplaforma: Os sistemas GNU/Linux não são específicos dos computadores e podem ser inseridos em diversas plataformas, desde consolas, a telemóveis. 1.4. O que é uma distribuição? Anteriormente falou-se que Linux era apenas o kernel em que muitos sistema operativos se apoiavam, estes mesmos sistema operativos designam-se distribuições de Gnu-Linux. Estas são portanto o conjunto de kernel + programas. E vai ser precisamente no conjunto de programas incorporados que estas vão diferir de umas para as outras. 1.5 Em que diferem as distribuições, qual escolher? À primeira vista, as distribuições diferem entre elas num aspecto muito importante, no DE ou WM que utilizam. DE é a sigla que significa "Desktop Environment", referencia um conjunto completo de aplicações todas integradas, que no conjunto formam um pacote que proporciona ao utilizador de GNU/Linux tudo aquilo que ele precisa para trabalhar normalmente. Inclui desde o próprio WM (windows manager), a processadores de texto (simples), leitores de audio, etc. Já os WM (windows manager) são apenas aplicações que transformam a interface de consola em interface gráfica. São esses mesmos WMs que ditam o aspecto gráfico da distribuição em questão, embora, claro, possa ser personalizado ao extremo consoante a criatividade do utilizador. Os três principais DEs são: GNOME: https://gnome.org KDE: https://www.kde.org/ XFCE: https://xfce.org/ LXDE: https://lxde.org/ Não vale muito a pena entrar-se em discussão sobre qual o melhor, pois é algo que tem muito a ver com os nossos gostos pessoais, como tal, só experimentando todos é que se pode saber de qual se gosta mais. No entanto as distribuições variam em muitas mais coisas. Há distribuição viradas para utilizações standard, enquanto há outras próprias para servidores, incluíndo diferentes programas, diferentes ferramentas, consoante o serviço para que foram concebidas. Podem-se considerar 4 distribuições base a partir das quais outras surgiram: RedHat Debian SlackWare Gentoo É portanto normal ouvir-se a expressão de que, por exemplo, Ubuntu é uma distribuição Debian-based. Distribuições é o que não falta, como tal torna-se difícil saber qual a ideal para nos iniciarmos, sites como o https://distrowatch.com/ podem ajudar, bem como este teste aos nossos conhecimentos com vista a determinar a distribuição melhor para nós: https://www.zegeniestudios.net/ldc/index.php. 1.6.Quero mudar para GNU/Linux, mas terei depois todos os programas que preciso, incluído os jogos que tanto gosto? Se vens de um sistema operativo Windows, não verás em Linux todos os programas a que estás habituado, mas isso não é problema, visto que para qualquer programa de Windows existem várias alternativas semelhantes e muitas vezes melhores. Podes ver aqui uma lista de alternativas. Uma coisa trivial em Linux, e que muitas vezes os utilizadores mais novos desconhecem, é que ao contrário de em Windows, cada distribuição de Linux já trás geralmente todos os programas que um utilizador normal necessita para trabalhar, desde pacotes office, leitores multimédia, browsers de internet, clientes de email, clientes de instant messanging, etc. Se ainda assim quiseres os teus programas de Windows em Linux, podes sempre utilizar o WINE, que te permite a emulação de milhares de aplicações de Windows. Ainda assim, a performance pode ser afectada. Quanto aos jogos, são cada vez menos as empresas que fazem versões destes apenas para sistemas operativos Windows. Como tal, há uma grande parte de jogos que podem ser instalados nativamente em GNU/Linux sem qualquer problema, como por exemplo o Unreal Tournament 2004, Doom3, America's Army, Quake e Wolfenstein Enemy Territory. 1.7 É difícil mexer em distribuições de GNU/Linux? Não, não é difícil, é diferente. Todos nós demorámos um certo tempo a aprender a trabalhar com o primeiro sistema operativo que nos foi posto à frente. Após o termos bem “aprendido” torna-se difícil a adaptação a novos sistemas, mas é algo que com a prática é superado e que requer paciência e força de vontade do utilizador. Em Linux o problema não se resolve com um format, e raramente com um reboot, estando a ajuda presente algures na net à espera de ser encontrada, só tendo o utilizador de se habituar a procurar, e expôr as suas dúvidas. Actualmente Linux já não é algo for geeks only, visto que praticamente tudo já se pode fazer por interface gráfica, enquanto que anteriormente ainda era usada para a maior parte das coisas a consola (espécie de MS-DOS). 1.8. É possível experimentar estes sistemas operativos sem compromisso? Na maior parte das distribuições, sim. Devido à existência de Live CDs ou Live DVDs. Estes não são mais que sistemas operativos demonstração, que ao serem gravados no sistema de armazenamento correspondente, e ao serem postos aquando do arranque do pc, são lidos e permitem uma viagem por esse mundo novo, sem nunca escrever nada no disco rígido. Nota: para o arranque se dar pelo Live CD ou Live DVD deves verificar se a propriedade boot sequence da tua BIOS está definida para correr pela drive em questão. 1.9. É possível ter Windows e Linux a correr no mesmo PC? Sim, é possível e bastante aconselhável a todos os utilizadores que têm dúvidas na sua permanência em Linux, ou que não estão certos se o Linux lhes poderá dar tudo o que estão habituados a fazer em Windows. Ver: Quais são os passos prévios a fazer antes de instalar uma distribuição GNU/Linux? 1.10. Onde arranjar as distribuições de GNU-Linux? Vê aqui a lista de mirrors portugueses para GNU/Linux. 1.11. Como verificar a integridade da distribuição sacada? Algo de muito importante, e que geralmente os novatos no mundo GNU/Linux se esquecem, é de verificar a integridade do ficheiro de imagem de cd sacado (MD5 hash). Para isso basta fazer o download do seguinte programa: http://digestit.kennethballard.com (para windows). Seguidamente deve-se selecionar o ficheiro a verificar a hash com o botão direito do rato, digestiT -> Calcule MD5 Hash. É retornado um valor que deve ser comparado ao valor dado no site do qual se descarregou a distribuição (atenção que nem todas as distros fornecem a hash), se este for igual, o ficheiro descarregado é integro. Se não for igual, deve-se proceder a um novo download da imagem de CD. 1.12. Quais os passos prévios a fazer antes de se instalar uma distribuição de GNU/Linux? Instalar uma distribuição deve ser algo feito com muita atenção, principalmente se queres fazer um sistema dual boot. Vamos dividir portanto esta parte em duas: se queres fazer um sistema dual boot, ou se apenas queres instalar GNU/Linux. Instalar GNU/Linux querendo fazer um dual boot. Vamos dizer-te os passos principais que deves fazer, para que nada de errado corra na tua tentativa de execução de um dual boot. Contudo é necessário avançar com precaução. Primeiro de tudo, se ainda não tens o Windows instalado (caso seja este o sistema a fazer boot com GNU/Linux), deves instalá-lo no PC em questão primeiro, pois caso este seja instalado após o GNU/Linux, corres o risco de ver a tabela de sistemas de arranque apagada, e apenas com referência ao Windows, ficando assim o GNU/Linux "perdido" algures no disco, situação que não é desejável. Se já tens Windows instalado segue estes passos (pressupondo que só tens Windows no teu computador). Verifica se a partição de Windows te está a ocupar todo o espaço do disco rígido. Para tal, podes simplesmente ir ao Meu computador e verificar se a partição tem de tamanho total, um valor aproximado do espaço que tu sabes que o disco rígido possui. Ou seja, se sabes que tens um disco rígido de 1TB e vês que a partição 😄 tem 998GB, por exemplo, ou mesmo 1TB certos. Se for este o caso, o que deves fazer imediatamente a seguir é instalar um programa tipo PartitionMagic. Após a sua instalação deves, desfragmentar o disco (passo muito importante), e por fim, usar o programa em questão para redimensionar a partição 😄, de maneira a teres espaço livre não-particionado no computador. Isto consiste em tornar a partição 😄 mais pequena. Por exemplo, seguindo o exemplo anterior, se esta tinha 1TB, para um bom sistema GNU/Linux poder lá ser instalado, deve ser redimensionada para, no máximo, 980GB. De referir também que é impossível redimensionar partições para valores menores que o espaço nelas ocupado. Só se quiseres estragá-las por completo e deixar de ter acesso ao sistema operativo lá instalado. Distribuições mais recentes de GNU/Linux também já permitem redimensionar a partição do Windows durante a instalação. Se por acaso já tiveres espaço livre não particionado suficiente para lá poder ser criada uma partição de GNU/Linux, podes saltar os passos anteriores. Entende-se como espaço livre não-particionado suficiente, o que te permita criar uma partição swap e de sistema, com espaço suficiente para lá instalares completamente a distribuição de GNU/Linux (não é recomendado ter menos de 5GB de espaço livre não-particionado). Posteriormente a estes passos, poderás então proceder à tua instalação, só tendo o cuidado de, no ecrã sobre as partições do instalador da distribuição, seleccionar esse mesmo espaço livre não particionado e escolher a hipótese de o formatar automaticamente. Instalar GNU/Linux como único sistema operativo do PC Neste caso não há grande coisa para falar. Basta meteres o CD de instalação da distribuição que desejas no leitor, e seguir os passos. Instalar uma distribuição deve ser algo feito com muita atenção, principalmente se queres fazer um sistema dual boot. 1.13. Como instalar? Existem alguns tutoriais no fórum que te podem ajudar a instalar a distribuição que desejas (vê o índice aqui). Tens de apenas ter em mente que a maior parte deles forma feitos para casos de instalação default, ou seja, instalar Linux como único sistema operativo dum PC, pelo que alguns passos podem divergir se, por exemplo, quiseres fazer um dual boot. Qualquer distribuição deverá ter no seu site um espaço a explicar como proceder na instalação. 2. Após a instalação 2.1. Como descompactar os formatos mais conhecidos de arquivo? Muitas vezes o mais pequeno pormenor pode ser uma dor de cabeça para um iniciante, e entre eles pode encontrar-se a descompactação de arquivos. Segue-se uma lista dos formatos mais conhecidos e as maneiras de descompactar o ficheiro na consola: ficheiros .tar.gz: $ tar -zxvf nomedoficheiro.tar.gz ficheiros .zip: $ unzip nomedoficheiro.zip ficheiros .rar: $ rar x nomedoficheiro.rar ficheiros .tar.bz2: $ tar -vxjpf nomedofile.tar.bz2 2.2. Como instalar programas em sistemas GNU/Linux? Bem, este é um aspecto que pode diferir um pouco de distribuição para distribuição, pois algumas delas têm incorporados meios de instalação simples de programas que devem ser usados em detrimento dos tradicionais. Vamos dar uma review a todos eles para que ninguém fique com o programa que deseja na mão sem saber o que fazer. Instalação a partir de repositórios Cada distribuição tem uma comunidade por trás que testa programas e inclui-os com a distribuição. Não é por acaso que uma distribuição tem imensas aplicações, sem necessidade de fazer download daqui e de lá. Normalmente os programas mais populares encontram-se nos repositórios, que nada mais são que "pastas" onde todo o software está armazenado nos servidores da distribuição. É apenas necessária uma ligação à internet, e podemos ter acesso a todo o conteúdo deste repositório. Para distribuições baseadas no Debian (por exemplo, Ubuntu): sudo apt install nomedoprograma Pacotes RPM, DEB, ... Estes pacotes são específicos para cada distribuição. Normalmente nos websites aparece a indicação da distribuição, cada uma com um link diferente. Neste caso, os fornecedores do software preocuparam-se em testar o software nestes ambientes, e criaram um pacote específico para a distribuição. o ficheiro é .deb (sistemas Debian-based): $ sudo dpkg -i nomedoficheiro.deb o ficheiro é .rpm: $ sudo rpm -ivh file.rpm ou então, podes converter o .rpm em .deb (programa alien necessário): $ sudo alien nomedoficheiro.rpm o ficheiro é .sh: $ sudo sh ./nomedoficheiro.sh o ficheiro é .run: $ sudo chmod u+x nomedofile.run sudo sh ./nomedofile.run o ficheiro é .bin: $ sudo ./nomedofile.bin Pacotes tar.gz, src, ... Estes são os pacotes que mais dúvidas causam a quem se inicia no mundo GNU/Linux. Eles contém o código fonte da aplicação, e têm de ser compilados para a distribuição em causa; da mesma forma que há pacotes diferentes para distribuições diferentes, também haverá diferentes maneiras de compilar o código, sendo essa a razão de muitas vezes o código fonte ser distribuído em vez de pacotes de instalação. Descomprimir o arquivo com base no tópico sobre esse mesmo assunto destas FAQ Entrar na pasta com os conteúdos descompactados pela consola. Efectuar a compilação do programa com os seguintes comandos (um de cada vez): $ ./configure $ make $ sudo make install Os passos podem variar ligeiramente dependendo do programa. Nesse caso, detalhes adicionais são habitualmente incluídos num ficheiro com o nome INSTALL ou README. 2.3. Não sei usar a consola, que comandos usar? O ideal para aprender a usar bash shell, a shell utilizada na consola da maioria das distribuições de GNU/Linux, será adquirir a Linux Bible (actualmente na versão 2020), que explica, em inglês, todo o seu funcionamento e comandos. No entanto, no fórum temos algo que poderá ajudar caso não pretenda estudar a fundo esta matéria, e que lhe dará uma ideia geral dos comandos: https://www.portugal-a-programar.pt/forums/topic/2292-gnulinux-comandos-consola/ 2.4. Como editar as permissões dos ficheiros por consola? Devido ao sistema hierárquico dos utilizadores, os ficheiros têm diferentes níveis de permissões conforme as necessidades e o utilizador que os queira aceder. Neste tutorial explicamos detalhadamente este sistema, de maneira a poder tirar todo o partido desta grande funcionalidade dos sistemas Unix: https://www.portugal-a-programar.pt/forums/topic/3900-permiss%C3%B5es-em-gnulinux-linteam/ 2.5. Como agendar tarefas? Esse utilitário chama-se cron e explicado neste tutorial: https://www.portugal-a-programar.pt/forums/topic/3468-como-utilizar-o-cron-linteam/ 3. Referências Linux Bible 2006 http://www.ubuntuforums.org/showthread.php?t=33183 http://www.gnu.org/ Bot do #Linux @ PTNet Os nossos miolos, pois ainda sabemos alguma coisa
    2 points
  14. Peço desculpa, mas nada disso vai ser preciso A impressão, o Hash, o SAFT, etc, continuam a ser criados tendo por base o mesmo, o que pode mudar é por exemplo a impressão que não precisa de conter o CDI, mas até isto tem a ver com o gosto pessoal de cada um Ainda por cima, se quisermos, nem temos de controlar a Série na abertura de documentos pois ao ser registada uma série duplicada o Webservice ( ou registo manual no site da AT ) vão responder em conformidade não devolvendo o Codigo Identificador da Série
    1 point
  15. Já debatido aqui ao longo de muitas páginas... https://www.portugal-a-programar.pt/forums/topic/57734-utilizar-webservices-da-at/page/472/?tab=comments#comment-623567 Há muita gente preocupada com esta questão, e a ASSOFT já fez exposição detalhada junto do Governo e da AT. Não significa que a AT vá alterar o serviço em conformidade, portanto, o melhor é contarmos com a implementação tal como ela está NOTA: o CÓDIGO da VALIDAÇÃO da SÉRIE é que faz parte do ATCUD (os dados que a AT usa para criar o código de validação é que deviam incluir o CÓDIGO INTERNO do documento)
    1 point
  16. Challenge devPT #1 A comunidade devPT quer continuar a apoiar e incentivar o Open-Source em Portugal. Como tal, a cada 2 meses referiremos um repositório GitHub onde vos pediremos que colaborem, sozinhos ou em conjunto. Porquê? Pelas razões que listamos de seguida: Temos para o vencedor uma licença JetBrains, válida para todas as aplicações JetBrains à exceção de "All Products Pack", "Datalore" e "JetBrains Academy", com a validade de um ano, podendo ser utilizada para fins pessoais e comerciais! 🎁 * É uma excelente oportunidade para te envolveres na comunidade Open-Source. Giving just for the sake of giving. "Que projecto vou eu fazer agora??" Enquanto não decides a que projecto pessoal te vais dedicar a seguir, participa e contribui para a comunidade! Aprendizagem! É incrível a quantidade de coisas que se pode aprender a colaborar em projetos de linguagens e áreas totalmente opostas à nossa. A capacidade de ver cada projeto com uma visão crítica dá-nos a possibilidade de ajudar o seu criador a contemplar necessidades que nunca pensou que existiam. *infelizmente mesmo que participem em equipas, apenas temos um prémio 😫 Como participar? O desafio começou dia 11 (sábado) às 21h30 e tem a duração de 2 semanas (compreendemos que nem todos têm a mesma disponibilidade e queremos dar algum tempo). Obviamente se quiserem podem colaborar depois desta data, mas não ficarão elegíveis a prémio. No final das 2 semanas será feito um sorteio aleatório entre os participantes. O repositório deste mês é o https://github.com/pdrbrnd/whatsinthebox. Para participares deves enviar um Pull Request para o repositório deste mês, terminando a descrição do Pull Request com a seguinte referência: (Devem substituir pelo vosso username utilizado no Discord da comunidade. Se ainda não estás no Discord entra aqui: https://discord.gg/2jaRskjtFj) A contribuição deverá ser uma resolução a um issue já existente e/ou a identificação de um novo e respetiva resolução num Pull Request. ✅ No final das 2 semanas será feito um sorteio aleatório entre os participantes, em que o sorteado será o vencedor da licença. Boa sorte!
    1 point
  17. Sobre o erro 4043, recebi ontem a seguinte resposta da AT: Boa tarde, Pode confirmar se o erro ainda persiste, pois foi efetuada uma atualização que corrigiu este erro. Agora sou um dos que passou a receber os erros 33 + 4001. Já reabri o ticket com estes erros
    1 point
  18. O delphi permite criar as estrutras tanto pelo WSDL como pelo XSD/XML. São objectos na mesma, não é preciso lidar com o XML em si. Mas a forma como se usa (aka os objectos criados) são diferentes do WSDL para o XSD/XML. Criar pelo WSDL, tanto quanto sei, obriga-te a certos procedimentos, que com o XSD não. O XSD resulta em classes puras e duras, e a partir daí trabalhas como bem te aprouver.
    1 point
  19. Acho que fui o primeiro a ter esse problema, ainda mais ninguém se queixava dele. De repente montes de gente começou com ele, mas pelo que percebo, não foram todos, tu só o tiveste agora... Eles devem andar a mexer, mas porque raio é que não se traduz em comportamento igual para todos em simultâneo?
    1 point
  20. Não assino XML nenhum. Normalmente os brokers fazem isso. Dos que conheço apenas a eSpap obriga a assinar o XML ao enviar. Mas como normalmente os clientes vão acabar por contratar um broker, e todos os brokers comunicam com a eSpap, não vale a pena comunicar directamente com a eSpap (na minha opinião). Mas a tourada ainda vai no intervalo... siga.
    1 point
  21. mas certificas os ficheiros ? é que por exemplo a iLink só permite a importação de documentos já assinados. andamos a consultar / pesquisar brokers e é o caos 😞 um diz que fazia tudo , afinal não envia xml por email , apenas pdf não estou a ver como se vai implementar isto para "tascas"
    1 point
  22. Não percebo a procura? Os xsd podem ser extraidos do wsdl.
    1 point
  23. Viva Segundo a documentação se não for definido uma data inicial, vai para o dia atual. Em todo o caso, esse JS que fizeste estás a criar texto na página, não vai funcionar. Tens que tornar o todayw uma variável e para a usares não usas as plicas é o nome da variável. Ou podes converter numa função e retornas a data para a variável initialDate. Se continuar a não funciona avisa
    1 point
  24. @nunopicadoExiste um WSDL que define todas as estruturas. Como é lógico, as "respostas" definem estruturas próprias... https://github.com/marcolopes/dma/blob/master/org.dma.services.at/src/pt/gov/portaldasfinancas/servicos/series/SeriesResp.java https://github.com/marcolopes/dma/blob/master/org.dma.services.at/src/pt/gov/portaldasfinancas/servicos/series/ConsultarSeriesResp.java https://github.com/marcolopes/dma/blob/master/org.dma.services.at/src/pt/gov/portaldasfinancas/servicos/series/OperationResultInfo.java https://github.com/marcolopes/dma/blob/master/org.dma.services.at/src/pt/gov/portaldasfinancas/servicos/series/SeriesInfo.java Sobre este assunto já tinha dito à AT: De qualquer forma, fiz uns ajustes... As estruturas "encadeiam-se" da seguinte forma: https://github.com/marcolopes/dma/blob/master/org.dma.services.at/src/org/dma/services/at/test/SeriesServiceTest.java public static void print(SeriesResp response) { if (response!=null) try{ print(response.getInfoResultOper()); print(response.getInfoSerie()); }catch(Exception e){ e.printStackTrace(); } } public static void print(ConsultarSeriesResp response) { if (response!=null) try{ print(response.getInfoResultOper()); for(SeriesInfo info: response.getInfoSerie()){ print(info); } }catch(Exception e){ e.printStackTrace(); } } public static void print(OperationResultInfo info) { if (info!=null) try{ System.out.print(info.getCodResultOper()); System.out.print(" - "); System.out.println(info.getMsgResultOper()); }catch(Exception e){ e.printStackTrace(); } } public static void print(SeriesInfo info) { if (info!=null) try{ System.out.print("Doc/Serie/Numero: "); System.out.print(info.getTipoDoc()); System.out.print("/"); System.out.print(info.getSerie()); System.out.print("/"); System.out.println(info.getNumFinalSeq()); System.out.print("Codigo Validacao: "); System.out.println(info.getCodValidacaoSerie()); System.out.print("Tipo Serie: "); System.out.println(info.getTipoSerie()); System.out.print("Classe Doc: "); System.out.println(info.getClasseDoc()); System.out.print("Justificacao: "); System.out.println(info.getJustificacao()); System.out.print("Motivo Estado: "); System.out.println(info.getMotivoEstado()); System.out.print("Data Estado: "); System.out.println(info.getDataEstado()); System.out.print("Data Registo: "); System.out.println(info.getDataRegisto()); System.out.print("Data Utilizacao: "); System.out.println(info.getDataInicioPrevUtiliz()); System.out.print("Meio Processamento: "); System.out.println(info.getMeioProcessamento()); System.out.print("Nif Comunicou: "); System.out.println(info.getNifComunicou()); }catch(Exception e){ e.printStackTrace(); } }
    1 point
  25. Também obtenho o erro 4043 O NIF do cliente para o qual está a registar a serie não possui atividade aberta. Estou a usar o NIF da empresa + o user no formato 500XXXXXX/0003 (o mesmo que uso para comunicar FTs e DTs). Também já adicionei a este user a permissão para comunicar séries. Este desenvolvimento não avança...
    1 point
  26. Neste caso estou a implementar a anulação da série em vez do fecho. Veremos se o serviço aceita anular uma série tanto tempo depois da comunicação dela.
    1 point
  27. Sobre continuar a usar as séries dos documentos atuais, no meu caso não irá dar pelo fato de ter séries repetidas para tipos de documentos diferentes...
    1 point
  28. Parece-me que será quem faz a Autofacturação, no caso o cliente que é quem emite as AutoFacturas. Ou seja, o contribuinte que é o destinatário ou cliente das facturas. As Autofacturas normalmente são utilizadas pelas empresas para emitir facturas em nome de pequenos fornecedores, que por vezes nem tem essa capacidade, para elas próprias. Logo faz sentido que sejam elas próprias a comunicar as séries das AutoFacturas. Eu tenho apenas um cliente que emite AutoFacturas. Eu utilizo uma série diferente para cada fornecedor. Nessa FAQ falam que podem utilizar a mesma série para fornecedores diferentes mas utilizando a mesma série, o SAF-T de cada um dos contribuintes iria com "buracos" na numeração. Ou seja, se utilizar a série AF para todas as Autofacturas, o contribuinte A teria, por exemplo, a factura AF/1 e a factura AF/3 sem a factura AF/2 que iria sair noutro SAF-T de outro contribuinte. Não me parece uma boa prática dai ter assumido diferentes séries para cada contribuinte de Autofacturas.
    1 point
  29. Eu uso o meu USER ( que uso desde sempre para comunicação de Guias e Faturas, e não uso xxxxxxxx/31 isso foi apenas um exemplo Tenho o USER com autorização a Registo de Séries, Certificado de Teste atualizado, Relógio do PC sincronizado com o Observatório Astronómico de Lisboa, etc Comunica bem com o webservice, mas recebo sempre o erro 4043 e não o 33 + o 4001 como muitos aqui recebem
    1 point
  30. https://www.portugal-a-programar.pt/forums/topic/57734-utilizar-webservices-da-at/page/459/?tab=comments#comment-623133 A semana passada falei com alguém responsável dentro da AT, e a conclusão é que o sistema tem de estar adaptado aos diversos cenários e não pode ter em conta as regras técnicas do SAFT. É certo que, tal como tinha dito anteriormente (e comuniquei à AT), o CID poderia ser um campo FACULTATIVO (existem cenários onde não faz sentido, mas existem outros tantos onde faz!). Não seria nada complicado ter um campo não obrigatório para identificar o CÓDIGO INTERNO do DOCUMENTO, que seria usado na geração do CÓDIGO de VALIDAÇÃO da SÉRIE. Uma análise desta situação não ficou descartada, mas o mais certo é o sistema ficar como está.
    1 point
  31. Já estou com alguns progressos, Faltava esta linha no references.cs criado automáticamente pelo VS usando o WSDL [System.Web.Services.Protocols.SoapHeader("SecurityToken")] Agora já recebo códigos de retorno, Obrigado a todos pelas dicas.
    1 point
  32. Precisamente o que eu disse há umas semanas. Este negócio é dos brokers e nós não ganhamos nada com isto e quando alguma coisa correr mal, somos nós que temos de resolver porque a culpa é sempre do software. Pela conversa que tive com a Saphety não os vejo tão empenhados em interligar com outros brokers e até com a própria ESPAP como vejo aqui neste fórum. Daí que no meu caso só vou ligar com a Saphety e Espap, se o cliente quiser trabalhar com outro eles que se entendam. O programa gera o ficheiro XML e o resto não me interessa. Esta não é a minha guerra.
    1 point
  33. Todo este sistema é uma palhaçada. Mostra bem o estado em que Portugal se encontra. Nós, até agora, só tivemos um cliente, grande, que trabalha muito para o estado nomeadamente a área da saúde. Depois de muita confusão fez um contrato com a SERES. Penso que só para "configurar" e iniciar o processo cobraram á volta de 1500€ e mensalmente irão cobrar um valor a rondar os 50€. Para o cliente que é, o custo é quase irrelevante mas o mesmo não acontecerá com outros clientes mais pequenos. Em termos de desenvolvimento nós só precisamos gerar o ficheiro e transferir por SFTP e eles tratam do resto. Isto deveria ser assim. Não consigo entender porque temos nós que andar a desenvolver comunicações via Web Services com os brokers. Eles é que deveriam disponibilizar ferramentas para isso. O nosso software só deveria gerar os ficheiros. E a confusão com a comunicação entre brokers está longe de estar resolvida. A poucos meses da entrada definitiva em vigor da FE o caos continua instalado (e não me parece que vá ficar resolvido a tempo). Eu desisti disto. Gero os ficheiros para uma pasta á escolha do cliente e o este que contrate quem quiser.
    1 point
  34. Eu tive uma apresentação online dos serviços durante 1h e 30m e foi-me dito que comunicam com outros. Essa comunicação tem no entanto uma taxa de activação com cada broker. Não sei o que te disseram, mas a mim foi esta a conversa. Esta taxa de activação tem de pagar o cliente claro! Não sendo feita esta activação eles simplesmente enviam por email para o cliente da fatura. E disseram ainda que estão a implementar a partir de Setembro (sem garantia) comunicações mais directas com outros brokers. Agora qual das conversas está correcta, não sei agora.
    1 point
  35. Já eu tenho implementado iLink, saphety e espap com estes 3 acho que consigo enviar para quase todos os brokers
    1 point
  36. Pelo que percebo, serve mesmo para isso. Se puseres a tag do código de validação, tens de meter o código, mas podes fazer o envio sem a tag, para consultar por outros parâmetros. Eu já comuniquei para a consultarSeries, e depois dá-me o erro do retorno que me está a dar no registo (seriesInfo errado no retorno), mas significa que o pedido chegou lá, foi aceite, e o sistema tentou retornar uma lista de séries.
    1 point
  37. "As faturas em PDF sejam consideradas faturas eletrónicas para todos os efeitos previstos na legislação fiscal, até 31 de dezembro de 2021." Para mim está claro, independentemente do que diz a ESPAP ou o que exigem as entidades públicas... Não me parece que vá existir um despacho para esclarecer este despacho!
    1 point
  38. provavelmente estas a usar o certificado errado para a autenticação com o webservice isso e um dos erros possíveis na autenticação Se não se consegue autenticar o servidor corta de imediato a ligação PS: Estive a ver o codigo, não percebo muito de C mas pelo que entendi o teu problema e mesmo esse. o ficheiro TesteWebservices.pfx tem 3 certificados. O Root o issuer (intermedio) e o de autenticação por esta ordem.
    1 point
  39. Marco, Para o serviço registarSerie e com o user de testes (599999993/0037) obtenho o erro 4043, mas com o utilizador da empresa produtora do software, obtenho o erro 5000. E já validei que o user da empresa possui as permissões necessárias. O erro que está a obter é com a utilização de qual utilizador?
    1 point
  40. Sim confirmo que o Serviço de comunicação de series esta a funcionar
    1 point
  41. OK, verificou a hora do PC ?
    1 point
  42. Novo email enviado à AT:
    1 point
  43. Este WSDL é manhoso... e até gera estruturas sem qualquer lógica. O que não entendo é a AT não ter um departamento responsável por supervisionar todas estas implementações, fazendo-as cumprir normas "rígidas" evitando assim que cada "empresa contratada" faça o que bem entender...
    1 point
  44. Olá José, Muito obrigado, já consegui meter a funcionar do meu lado! Não estava a aplicar bem o hash devolvido pelo webservice e o PDF ficava com a assinatura corrompida...a documentação que a AMA dá (quase nenhuma) é péssima.
    1 point
  45. Se fizeres a integração via oAuth, sim expira mas podes renovar o token de acesso sem intervenção do utilizador. Não andava muito atento a estas assinaturas electrónicas e tinha/tenho ideia que a sua obrigatoriedade é só para empresas públicas (?), para além disso vi os preços de algumas entidades e é impracticável. Após ter conhecimento do SAFE e do custo (2 primeiros anos grátis e depois 40eur a cada 2 anos) parece-me uma solução apetecível para introduzir no meu software, independentemente de ser apenas ou não uma obrigatoriedade para a função pública.
    1 point
  46. Sim, a ideia com que fiquei é essa mesmo. Se houver integração com o nosso software, não precisa código da chave móvel para cada assinatura, só no login do nosso programa. Ou seja, o gerente abre o programa de manhã e pode deixar um funcionário a fazer faturas o dia todo. Não fiquei com certezas sobre a durabilidade do login perante o sistema SAFE (caduca ao fim de x minutos sem utilização???)
    1 point
  47. Sim, em princípio, o SAFE pode assinar um PDF qualquer. Mas, não ficará com a assinatura: "em representação da Sociedade "xxx" com poderes para assinar faturas"? Parece-me que é assim que funciona, já que para poder assinar Faturas é necessário pedir a representação da Sociedade respetiva, com poderes para diversos atos, neste caso a assinatura de Faturas. É mesmo preciso enviar a Certidão Permanente da empresa para poderem confirmar que o assinante tem realmente poderes para o fazer, e só depois eles libertam essa opção no Cartão do Cidadão do assinante. No meu caso, uso o Cartão do Cidadão para assinar Documentos como Contabilista Certificado e é assim que aparece a assinatura nos PDFs, quando opto pela respetiva qualidade.
    1 point
  48. Bom dia, já consegui resolver o problema, mas tive de abrir um ticket... Apesar de ter colocado os caminhos na opção "Framework search path" estava a escapar-me um pormenor Deixo-vos a resposta, caso venham a precisar. "If you look at the directory structure of what is downloaded from Getit, there are .xcframework directories. If you drill into those directories, you will find ios-armv7_arm64 directories. In there are ios-armv7_arm64, which contains libraries that we can link to. iOS projects have a Framework search path option, but they cannot search in an .xcframework - only .framework. This is what I suggest that you do: 1. Create a Firebase directory in your project directory structure 2. Copy C:\Users\stevea\Documents\Embarcadero\Studio\21.0\CatalogRepository\FirebaseSDKforiOS-6.28\Firebase\FirebaseAnalytics and C:\Users\stevea\Documents\Embarcadero\Studio\21.0\CatalogRepository\FirebaseSDKforiOS-6.28\Firebase\FirebaseMessaging to that FireBase directory. 3. Go to the FireBaseAnalytics directory. 4. For each .xcframeworkdirectory, go to ios-armv7_arm64 and copy the .framework directory that you will find there and copy it to the FireBaseAnalytics folder. 5. Repeat for the FirebaseMessaging folder." by Embarcadero Support
    1 point
  49. O Portal de Downloads da comunidade Portugal-a-Programar destina-se a promover a partilha de conteúdos relativos à programação e áreas similares, que podem incluir materiais usados por estudantes nos seus ciclos de estudos (e.g., apontamentos, exercícios, testes), ou outros materiais desenvolvidos pelos utilizadores que podem ser úteis a outros utilizadores (e.g., tutoriais, scripts, bibliotecas, aplicações). Tem por objectivo criar um repositório de conteúdos, que permite a sua melhor organização e catalogação, facilitando assim o trabalho de pesquisa dos utilizadores. Qualquer utilizador registado pode submeter conteúdos, desde que sejam da vossa autoria, ou que o autor tenha decidido dispobilizá-los publicamente. É possível submeter ficheiros directamente, ou indicar um link para um ficheiro externo. (Caso seja o autor dos ficheiros, é preferível enviar directamente o ficheiro, para evitar links quebrados. Caso não seja o autor, pode indicar o link onde o autor disponibiliza os conteúdos. Por favor não use links para sites como Rapidshare e afins.) Para submeter ficheiros, devem escolher uma categoria apropriada, seleccionar os ficheiros a enviar (ou indicar os links para os ficheiros), e fornecer a seguinte informação: Nome do Ficheiro (obrigatório) Deve permitir aos utilizadores ter uma ideia do conteúdo dos ficheiros, nomeadamente do tema a que dizem respeito (e.g., Exercícios de Java, Slides sobre Algoritmos de Ordenação, Apontamentos de Teoria de Números, Exercícios de Criptografia). Se forem materiais de uma cadeira, também têm que identificar pelo menos a instituição de ensino, e opcionalmente a cadeira, curso (podem usar acrónimos, para o nome não ficar demasiado grande). Versão do Ficheiro (opcional) Identifica a versão do ficheiro. No caso de bibliotecas/código pode ser a versão (e.g. 1.0, 2.1), e no caso de ficheiros como tutoriais, exercícios e afins, que não tenham versão, pode ser a data (e.g. 2011/12). Tags do Ficheiro (obrigatório) Palavras-chava que descrevem os conteúdos submetidos (e.g., c, pascal, bases de dados, algoritmos de ordenação). Change Log (opcional) Registo de alterações introduzidas numa nova versão. Descrição (obrigatório) Devem dar os detalhes dos conteúdos aqui. Deve conter, pelo menos, um pequeno parágrafo com um resumo dos conteúdos. Caso o conteúdo a submeter disponha de índice, também é conveniente colocá-lo aqui. Adicionalmente, nos casos de materiais de uma cadeira, também devem indicar a cadeira, curso e instituição. Caso estejam a submeter conteúdos que não são da vossa autoria, é também conveniente que indiquem o autor. Licença (opcional) Licença dos conteúdos. Se os conteúdos forem da vossa autoria, indiquem a licença que quiserem. Se não forem, devem respeitar a licença que o autor escolheu (se não a souberem, deixem em branco). Submetido pelo Autor (obrigatório) Indica se o utilizador que submeteu o ficheiro é o autor dos conteúdos. Website (opcional) Pode ser um website sobre os conteúdos (ou onde estes também possam ser descarregados), ou o website do autor, por exemplo. Sempre que possível, comprima os ficheiros antes de os enviar. Em particular no caso de submeter mais do que um ficheiro, deve juntá-los num único arquivo comprimido. Desta forma permite que se poupe espaço e largura de banda. (Caso não o faça, o staff reserva-se no direito de comprimir os ficheiros, sempre que tal pareça adequado.) Os ficheiros estão sujeitos a moderação, e só ficarão disponíveis publicamente depois de revistos pelo staff. Esta área está sujeita as regras do P@P, que promovem o respeito pelos direitos de autor. Contudo, nem sempre será possível obter informação precisa/correcta sobre os direitos de autor dos conteúdos. Assim, caso encontre no nosso portal conteúdos seus que não autoriza a que sejam disponibilizados, por favor use a link "Denunciar Ficheiro" para notificar o staff de tal situação. A moderação destina-se também a garantir que os conteúdos correspondem à descrição (embora tal não seja possível garantir totalmente para ficheiros externos), ou que a descrição fornece um nível de informação adequado, e também para normalizar a informação disponibilizada. Depois de o ficheiro ser submetido, será criado automaticamente um tópico no fórum, onde os conteúdos poderão ser discutidos. Na página do ficheiro irá existir um link para o tópico. (Caso já exista um tópico no fórum a abordar o conteúdo, por favor notifique o staff de tal situação, para evitar a duplicação de discussões.) O link "Denunciar Ficheiro" pode também ser usado para denunciar links quebrados, ou ficheiros que representem riscos para utilizadores (e.g., malware). O staff procurará analisar as denúncias o mais rapidamente possível. (Estas normas serão revistas regularmente, de modo a se adaptarem ao comportamento dos utilizadores. Recomenda-se a leitura regular das mesmas.)
    1 point
  50. Esse artigo é apenas um pequeno resumo de inúmeras possibilidades de aplicar e evitar o PHP Injection. Uma coisa que devemos sempre nos preocupar são nossas querystring: essas 2 abaixo são as mais usadas (paginas e includes) e claro isso é valido para outras variáveis também. pagina.php?pag= pagina.php?inc= Por incrível que pareça, isso é muito comum e é com esta vulnerabilidade que muitos sites são atacados. Por exemplo: se você fizer uma busca no google com o termo. Esses são só sites que você irá testar, portanto facilita muito a vida, se você colocar no google allinurl: string você encontra muita coisa legal, aproximadamente 2.770.000 para allinurl: string Com a busca você vai encontrar muita coisa do tipo: pagina.php?pag= Com o crescimento de muitos sites e maior facilidade no desenvolvimento, surgem claro muitos servidores mal cuidados e muitos programadores despreocupados com a segurança e com isso uma pessoa com intenção de prejudicar pode usar um exploit remoto assim: Você tem a URL www.qualquercoisa.xb/pasta/foto.gif Com um exploit você pode fazer www.qualquercoisa.xb/pasta/foto.gif?&exp=comando (exp exploit) Não irei entrar em questões mais técnicas que não é o objetivo, mas se com isso você pegar um servidor vulnerável, você pode escalar privilégios e poderá ter até o root da maquina, essas maquinas são usadas muito por spamers, são chamadas de maquinas Zumbi. Algumas maneiras para melhorar a segurança seriam as listadas abaixo: Primeiro, edite o php.ini especifique as opções: Código: allow_url_fopen = Off Isso vai impedir que um include ou um open que não esteja hardcoded, ou seja, que tenham seus valores fornecidos por uma variável, façam includes remotos, como no exemplo citado no início deste post. Código: safe_mode = On Isto impedirá que os scripts em PHP abram arquivos que não sejam do mesmo dono (UID) do script. Mas não esqueça de dar um chown nos scripts para um usuário sem privilégios (o nobodyserve), criando um utilizador phpscripts ou algo assim. Código: register_globals = Off O "register globals" ligado diz para o PHP que qualquer variável passada como parâmetro deve ser reconhecida como uma variável válida dentro do código PHP. Isto facilita muito as coisas pois com isso não precisamos ficar associando o array $_REQUEST a variáveis internas, mas ao mesmo tempo é perigoso, pois permite a um atacante controlar variáveis internas que você não tenha corretamente incializado. Código: magic_quotes_gpc = On Se você não tem conhecimento sobre como "tratar" variáveis antes de enviá-las para bancos de dados ou programas externos, uma boa opção é deixar o "magic quotes" ligado, pois ele dificulta bastante a manipulação de strings para, por exemplo, provocar um SQL Injection no seu acesso ao banco. Código: display_errors = Off Ao invés de visualizar os erros de programação no browser, use o log do servidor. Esta opção impede que atacantes provoquem erros na sua aplicação para descobrirem paths da estrutura de arquivos. Leia as demais opções do seu php.ini, especialmente se você estiver usando o PHP sob IIS/Windows. Existem coisas importantes lá, mas que nunca tive a oportunidade de usar. Além das configurações, algumas práticas de programação podem salvar a sua pele. Por exemplo, nunca passe o nome de um ficheiro como parâmetro para um include ou fopen! É muito comum você encontrar sites com URLs do tipo http://www.sitequalquerrr.com/index.php?inc=contato E então, quando mudamos a palavra contato para qualquer outra coisa (por exemplo "testnotfound") o PHP exibe a fatídica mensagem de erro de "Arquivo não encontrado". E atenção: não confie no seu código se você está acrescentando um path completo e a extensão do arquivo na hora de incluir, por exemplo: Código PHP: include("/home/asnocoder/www/includes/".$inc.".php"); Não confie nisso! Continua perfeitamente possível incluir qualquer arquivo do seu sistema através da manipulação correta da variável $inc. E já que estamos falando de includes, NUNCA COLOQUE EXTENSÃO .inc NOS SEUS SCRIPTS OU BIBLIOTECAS. Estas extensões não são tratadas pelo webserver e o código fonte do programa é exibido caso eles sejam chamados diretamente no browser. Você tem três opções: 1. Renomear estes arquivos para "arquivo.inc.php", por exemplo (e alterar os includes que fazem referência a eles). 2. Mover estes arquivos para uma parte da árvore de diretórios que não seja acessível diretamente pelo browser. 3. Proteger o diretório onde estes arquivos estão. Segue exemplo de diretrizes do Apache: Código: <Location ~ "/[^ ](?=\.inc(\?[^ ]*)?)/"> Options None Order Allow, Deny Deny from All AllowOverride None Satisfy All </Location> Quando eu tenho que fazer um include/fopen de acordo com uma opção do usuário, eu costumo criar um ninho de IFs e passar como parâmetro para a página apenas um número, ou um código qualquer, fazendo algo do tipo: $inc = "index.php"; // Página default if($_GET['opcao']=="1") { $inc = "pagina1.php"; } if($_GET['opcao']=="2") { $inc = "pagina2.php"; } include($inc);
    1 point
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.