Trabalhei com muitas APIs grandes, como Google Maps, login do Facebook, Font Awesome Pro etc. Em muitas delas, você obteria uma seção onde colocaria um domínio na lista branca. Basicamente, se a solicitação recebida for deste domínio na lista branca, ela será aceita. Caso contrário, é descartado. Isso faz sentido para mim, mas como isso é realmente aplicado? Parece que uma solicitação HTTP seria muito fácil de falsificar se você já conhece o domínio da lista branca.
Um ótimo exemplo seria carregar um pacote Font Awesome Pro em seu HTML. Você recebe uma tag de script JS inserida, mas no painel deles você pode colocar seus domínios na lista branca. Mas se um visitante mal-intencionado do meu site quiser, ele já conhece meu domínio e pode falsificar a solicitação e usar meu pacote Font Awesome Pro. Então, como isso realmente funciona?
Eles usam os cabeçalhos
Referer
e/ouOrigin
solicitação na solicitação http para a API. Claro, isso pode ser forjado. A partir de um cliente adequado, você pode definir quaisquer cabeçalhos com os valores desejados.Mas não em um navegador.
Em um navegador moderno e não modificado, não há como um invasor incorporar o mesmo Javascript em sua página de origem (~domínio) e ainda enviar o seu na solicitação, você não pode modificar o referenciador e os cabeçalhos de origem. Assim, eles podem enviar solicitações de seus próprios clientes ou aplicativos, mas não podem fazer seu próprio site com o seu acesso para outros usuários (deles) usarem, e esse é o ponto. Também é a única coisa contra a qual se destina a proteger. Esses Javascripts geralmente não fazem sentido fora do contexto de um navegador, então geralmente funciona bem.
Como argumento adicional, você poderia dizer que, como invasor, você pode apenas fazer proxy dessas solicitações. E se o invasor configurar seu site e implementar um proxy no lado do servidor, seus clientes fizerem solicitações ao back-end e o back-end fizer solicitações à API real com suas credenciais e sua origem na solicitação (porque o back-end poderia ofc fazem isto). Nos raros casos em que isso realmente faria sentido (ou seja, por que eles fariam isso, qual seria o benefício?), o proprietário da API colocaria rapidamente esse servidor na lista negra se tivesse algum monitoramento em vigor, por exemplo, porque solicitações normais chegam de todos os vários endereços IP residenciais dos usuários, mas todas essas solicitações viriam do mesmo servidor. Isso seria bastante fácil de filtrar. Portanto, mesmo esta é uma ameaça aceitável para muitas APIs.