Blog · Publicado originalmente em inglês a .
Um site publicado é um ficheiro que um desconhecido escreveu. Corre num navegador, o que quer dizer que corre JavaScript, o que quer dizer que pode fazer tudo o que o navegador deixa fazer à origem a partir da qual é servido. Essa última parte da frase é o desenho inteiro.
Quanto vale uma origem
Os navegadores não protegem os ficheiros uns dos outros. Protegem as origens umas das outras: o esquema, o host e a porta, em conjunto. Os cookies, o armazenamento local e a capacidade de ler a resposta de outro site param todos nessa fronteira, e dentro dela não há fronteira nenhuma.
Por isso, se um site que alguém publicou fosse servido a partir do mesmo host da aplicação onde as pessoas iniciam sessão, ficaria dentro da origem da aplicação. Não perto dela. Dentro. Todos os cookies que a sessão usa seguiriam com os pedidos dele, e ele próprio poderia fazer esses pedidos.
O caminho de limpar o ficheiro, em resumo
A alternativa é retirar do ficheiro o que é perigoso. Tentámos querer isto, porque é a versão em que tudo vive num só domínio e o produto inteiro é mais pequeno.
Não sobrevive ao contacto com o trabalho real. Os ficheiros que as pessoas publicam são painéis, calculadoras e pequenas aplicações. O script é a coisa. Retirá-lo deixa uma captura de ecrã. E limpar HTML suficientemente bem para servir de fronteira de segurança é um problema com um longo historial público de quem perdeu.
O que a separação custa
Dois certificados, um deles wildcard, que não pode ser emitido provando o controlo de um único nome de host e por isso precisa de um token de DNS. Dois conjuntos de variáveis de ambiente. Cada ligação entre as duas metades é entre origens diferentes, por isso tudo o que tem de atravessar leva um token assinado, de vida curta e com uma só função.
Também custa uma pequena dose permanente de confusão: a aplicação está num nome e os sites que publica estão noutro, e ninguém chega à espera disso.
O que ganhamos com isso
Um site publicado pode ser tão hostil quanto o autor quiser e, mesmo assim, não chegar a nada. Não pode ler os seus cookies, porque não são os cookies dele. Não pode chamar a API em seu nome, porque o navegador não lhe envia as suas credenciais. Não pode reescrever a página à volta dele, porque não há nenhum site à volta: o frame onde vive é outra origem.
E significa que podemos dizer que sim por predefinição. O que é enviado não tem de ser inspecionado à procura de hostilidade antes de poder correr, porque correr não é a parte perigosa. O lugar onde corre é.
Perguntas
Porque é que o Solta usa dois domínios?
Porque um site publicado é um ficheiro que um desconhecido escreveu, e pode fazer tudo o que o navegador deixa fazer à origem a partir da qual é servido. No mesmo host da aplicação, ficaria dentro da origem da aplicação, junto da sua sessão.
Um site publicado pode ler os meus cookies do Solta?
Não. É servido a partir de outra origem, por isso os seus cookies não são dele, e o navegador não lhe envia as suas credenciais. Também não pode chamar a API em seu nome.
Porque não retirar dos ficheiros o que é perigoso?
Porque os ficheiros que as pessoas publicam são painéis, calculadoras e pequenas aplicações, e o script é a coisa. Retirá-lo deixa uma captura de ecrã. E limpar HTML suficientemente bem para servir de fronteira de segurança tem um longo historial público de quem perdeu.
O que custam os dois domínios?
Dois certificados, um deles wildcard, que precisa de um token de DNS. Dois conjuntos de variáveis de ambiente. E tudo o que passa de uma metade para a outra leva um token assinado, de vida curta e com uma só função.
Um site tem de ser inspecionado antes de poder correr?
Não à procura de hostilidade. Correr não é a parte perigosa, o lugar onde corre é. Por isso o Solta pode dizer que sim por predefinição.

