Eu tenho meu site no servidor
http://www.myserver.uk.com
Para isso eu tenho dois domínios,
http://one.com
e
http://two.com
Gostaria de obter com o domínio atual do PHP, mas se eu usar $_SERVER['HTTP_HOST']
, isso me mostrará
myserver.uk.com
ao invés de:
one.com or two.com
Como posso obter o domínio, não o nome do servidor?
Eu tenho o PHP versão 5.2.
$_SERVER['HTTP_HOST']
. Se os sitesone.com
etwo.com
está "redirecionando" usando um (i) quadro, a própria página ainda vem de myserver.uk.com, assim você não vai obter o domínio real. Para que serve a fonte HTMLone.com
?Respostas:
Tente usar isto:
$_SERVER['SERVER_NAME']
Ou analisar
fonte
HTTP_X_ORIGINAL_HOST
pode ser modificado pelo usuário e não é confiável. Isso nem sempre pode ser um problema, mas é algo para estar ciente.O melhor uso seria
E pode ser usado assim:
Este código abaixo é uma boa maneira de ver todas as variáveis em $ _SERVER em uma saída HTML estruturada com suas palavras-chave destacadas que param imediatamente após a execução. Já que às vezes esqueço qual usar - acho que isso pode ser bacana.
fonte
Usar
$_SERVER['HTTP_HOST']
me (subdomínio.) Maindomain.extension. Parece a solução mais fácil para mim.Se você estiver realmente 'redirecionando' por meio de um iFrame, poderá adicionar um parâmetro GET que indica o domínio.
E então você pode definir uma variável de sessão que persista esses dados em todo o aplicativo.
fonte
A única maneira segura de fazer isso
Todas as outras respostas nesta página têm implicações de segurança que você precisa estar ciente.
A maioria das estruturas cuida de armazenar o domínio para você, portanto, você deve consultar a documentação para sua estrutura específica. Se você não estiver usando uma estrutura, considere armazenar o domínio em um dos seguintes locais:
+ ------------------------------------------------- --- + ----------------------------------- +
| Métodos seguros de armazenamento do domínio | Usado por |
+ ------------------------------------------------- --- + ----------------------------------- +
| Um arquivo de configuração | Joomla, Drupal / Symfony |
| O banco de dados | WordPress |
| Uma variável ambiental | Laravel
| Um registro de serviço | DNS do Kubernetes |
+ ------------------------------------------------- --- + ----------------------------------- +
Você pode usar o seguinte ... mas eles não são seguros
Os hackers podem fazer com que essas variáveis produzam o domínio que quiserem. Isso pode levar a envenenamento de cache e ataques de phishing quase imperceptíveis.
Isso obtém o domínio dos cabeçalhos de solicitação abertos à manipulação por hackers . Mesmo com:
Este pode ser melhorado se a configuração do Apache usecanonicalname estiver desativada; nesse caso
$_SERVER['SERVER_NAME']
, não será mais permitido preencher valores arbitrários e estará seguro. No entanto, isso não é o padrão e não é tão comum em uma instalação.Em sistemas populares
Abaixo está como você pode obter o domínio atual nas seguintes estruturas / sistemas:
WordPress
Se você estiver construindo um URL no WordPress, use home_url ou site_url , ou qualquer outra função de URL .
Laravel
A
request()->getHost
função é herdada do Symfony e está segura desde que o CVE-2013-4752 de 2013 foi corrigido.Drupal
O instalador ainda não se encarrega de torná-lo seguro ( problema nº 2404259 ). Mas no Drupal 8 há documentação que você pode seguir em Configurações do host confiável para proteger sua instalação do Drupal, após a qual o seguinte pode ser usado:
Outras estruturas
Sinta-se à vontade para editar esta resposta para incluir como obter o domínio atual em sua estrutura favorita. Ao fazer isso, inclua um link para o código-fonte relevante ou para qualquer outra coisa que me ajude a verificar se a estrutura está fazendo as coisas com segurança.
Termo aditivo
Exemplos de exploração:
O envenenamento por cache pode ocorrer se uma botnet solicitar continuamente uma página usando o cabeçalho de hosts incorretos. O HTML resultante incluirá links para o site do invasor, onde eles poderão fraudar seus usuários. Inicialmente, os links maliciosos serão enviados apenas de volta ao hacker, mas se o hacker fizer solicitações suficientes, a versão maliciosa da página acabará no seu cache, onde será distribuída a outros usuários.
Um ataque de phishing pode ocorrer se você armazenar links no banco de dados com base no cabeçalho do host. Por exemplo, digamos que você armazene o URL absoluto nos perfis de um usuário em um fórum. Ao usar o cabeçalho errado, um hacker pode fazer com que qualquer pessoa que clica no link do perfil seja enviada para um site de phishing.
O envenenamento por redefinição de senha pode ocorrer se um hacker usar um cabeçalho de host malicioso ao preencher o formulário de redefinição de senha para um usuário diferente. Esse usuário receberá um e-mail contendo um link de redefinição de senha que leva a um site de phishing.
Aqui estão alguns exemplos mais maliciosos
Advertências e notas adicionais:
$_SERVER['SERVER_NAME']
é preenchido com o mesmo cabeçalho$_SERVER['HTTP_HOST']
teria usado de qualquer maneira (mais a porta). Esta é a configuração padrão do Apache. Se você ou o devops ativam isso, então você está bem - ish - mas você realmente quer confiar em uma equipe separada, ou em você mesmo daqui a três anos, para manter o que parece ser uma configuração menor em um ambiente não -valor padrão? Mesmo que isso torne as coisas seguras, eu recomendaria não confiar nessa configuração.$_SERVER['SERVER_NAME']
não retornará o domínio atual, mas retornará o valor da diretiva serverName.Little Rant:
Esta pergunta recebeu centenas de milhares de visualizações sem uma única menção aos problemas de segurança em questão! Não deve ser assim, mas apenas porque uma resposta de estouro de pilha é popular, isso não significa que é segura.
fonte
$urlparts['path']
não está configurada se estiver instalada no diretório raiz do domínio. Senão$urlparts['path']
retorna o subdiretório.Tente
$_SERVER['SERVER_NAME']
.Dicas: Crie um arquivo PHP que chama a função
phpinfo()
e consulte a seção "Variáveis PHP". Há um monte de variáveis úteis em que nunca pensamos lá.fonte
Sei que isso pode não estar totalmente relacionado ao assunto, mas, na minha experiência, acho útil armazenar o WWW-ness da URL atual em uma variável.
Edit: Além disso, por favor, veja o meu comentário abaixo, para ver o que isso está acontecendo.
Isso é importante ao determinar se deve enviar chamadas Ajax com "www" ou sem:
Ao despachar uma chamada Ajax, o nome do domínio deve corresponder ao da barra de endereços do navegador, caso contrário você terá o Uncaught SecurityError no console.
Então, eu vim com esta solução para resolver o problema:
Em seguida, com base em se $ WWW é verdadeiro ou falso, execute a chamada Ajax adequada.
Sei que isso pode parecer trivial, mas esse é um problema tão comum que é fácil tropeçar.
fonte
window.location
. Em PHP você conseguiuSERVER_NAME
.Todo mundo está usando a
parse_url
função, mas às vezes o usuário pode passar o argumento em um formato diferente.Para corrigir isso, eu criei a função. Veja isso:
Basta passar o URL e obter o domínio.
Por exemplo,
retornará o resultado será
E em alguma situação:
E também retornará
stackoverflow.com
.fonte
// para obter o domínio
// domínio com protocolo
// protocolo, domínio, queryString total ** Como o $ _SERVER ['SERVER_NAME'] não é confiável para hospedagem de vários domínios!
fonte
Simplesmente tente:
fonte