2011-07-12 2 views
10

J'ai récemment découvert qu'il existe d'autres noms de domaine pointant vers mon site Web (qui ne m'appartiennent pas) et je me demandais comment les gens peuvent arrêter/empêcher cela. J'héberge cela sur peer1 en utilisant IIS et j'utilise ASP.NET C#. Puis-je utiliser un HttpModule ou un autre code pour rejeter des noms de domaine qui ne m'appartiennent pas?Comment empêcher d'autres domaines de pointer vers mon domaine?

Y a-t-il un meilleur moyen?

+0

Votre site ne contrôle pas les enregistrements DNS qui pointent vers l'adresse IP de votre serveur. – zellio

+1

Mais ne pouvez-vous pas trouver le nom de domaine d'où provient la requête? Si vous pouviez le découvrir, vous pourriez alors rediriger vers une autre page. Certains sites ne le font-ils pas pour empêcher les liens chauds? –

+0

Pourriez-vous mettre à jour la question avec des détails sur votre environnement d'hébergement. Hébergez-vous ce site vous-même ou avec une société d'hébergement? Quel est le serveur Web (devinant IIS) et avez-vous un accès administratif à celui-ci. –

Répondre

5

Vous devez activer l'hébergement virtuel basé sur le nom et afficher uniquement votre site Web réel pour les noms de domaine souhaités. Pour tous les autres noms, vous pouvez afficher un message d'erreur approprié.

Détails: Votre serveur Web est contacté par son adresse IP. Il n'y a rien que vous puissiez faire pour arrêter cela. Tout le monde peut dire "connectez-vous à cette adresse IP". Par exemple, n'importe qui peut enregistrer de nouveaux noms de domaine pour pointer vers l'adresse IP de votre serveur. Cependant, à l'intérieur de la demande, il y a un champ Host avec un nom comme www.example.com. À la réception de la demande, votre serveur peut choisir d'inspecter le champ Host et de fournir un contenu différent en fonction de cette valeur. Dans le cas le plus simple, le serveur ignore complètement le champ et imprime toujours le même contenu. Mais dans une configuration plus sophistiquée, appelée «hébergement basé sur un nom (virtuel)», le serveur choisit le contenu en fonction du nom d'hôte.

Voici comment fonctionnent les hébergeurs Web partagés: Il existe un seul serveur, mais en fonction du nom d'hôte demandé, il crache un site Web différent pour chaque nom. Par conséquent, si vous souhaitez lier le contenu de votre serveur à votre nom d'hôte, vous devez indiquer à votre serveur de créer votre site Web uniquement pour votre nom souhaité et de produire un site Web (d'erreur) différent pour tous les autres cas.

Dans Apache, cela est trivial à configurer, il suffit de vérifier leur documentation; pour IIS je ne le saurais pas mais j'imagine que c'est tout aussi simple.

+0

pourriez-vous expliquer cela un peu plus? Je suis un peu perdu sur la façon d'exécuter ce que vous demandez dans iis. – locoboy

+0

@cfarm: J'ai ajouté quelques informations –

+0

@Kerrek, qu'en est-il de spécifier l'en-tête de l'hôte dans IIS? (Garder les choses simples) –

3

Si votre environnement d'hébergement est IIS et que vous avez un accès admin. Définissez votre site Web par défaut pour afficher une page d'erreur, puis créez un nouveau site avec l'en-tête de l'hôte correspondant à votre domaine pour qu'il pointe vers votre site Web.

0

Si je me souviens bien quand j'ai vérifié mes sites cpanel, j'ai vu une fonctionnalité qui a arrêté les redirections vers mon domaine si cochée. J'utilise Hostso comme hôte, donc vérifiez leur cpanel de test pour cela.

Hope it helps alittle atleast :)

Fredrik wirth

1

En tant que solution temporaire, vous pouvez le faire. Peut être sur le chargement de la page d'accueil ou BeginRequest.

if(!Request.Url.Host.ToLower().contains("mysite.com")){ 
    Response.Redirect("error.html"); 
} 
0

si vous voulez gérer dans le code puis faites-le dans Global.asax dans BeginRequest comme ci-dessous

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (!context.Request.Url.Host.ToLower().Equals("www.mydomain.com")) 
    { 
     context.Rewritepath("/invalidpage.aspx"); 
    } 
} 

L'autre méthode simple consiste à spécifier un en-têtes d'hôte dans IIS pour votre site web.

http://technet.microsoft.com/en-us/library/cc753195(v=ws.10).aspx Note: Je vous écris par mon portable donc envisager des fautes d'orthographe

+1

Il est possible que le nom d'hôte ne contienne pas "www" –

+0

ouais vous avez raison, je suggérais juste que mon code ne peut pas être implémenté. –

1

Dans IIS il y a un paramètre appelé bindings qui vous permet de sélectionner votre site Web les noms d'hôte répondre. Cette fonctionnalité permet à une instance d'IIS d'héberger plusieurs sites Web sur une même adresse IP.

Si vous souhaitez que votre site ne fonctionne que pour http://example.com/ et http://www.example.com/, vous devez définir les liaisons pour travailler uniquement pour "example.com" et "www.example.com".

L'exception ici est si vous utilisez SSL. Si tel est le cas, IIS ne peut pas déterminer le nom d'hôte et vous devrez probablement utiliser une adresse IP dédiée pour votre site. Dans ce scénario, la solution de user608576 fonctionnera. Bien que, je mettrais ce code dans votre fichier Global.asax:

<%@ Application Language="C#" %> 
<script runat="server"> 
void Application_BeginRequest(Object sender, EventArgs args) 
{ 
    HttpRequest request = HttpContext.Current.Request; 
    HttpResponse response = HttpContext.Current.Response; 

    if((request.Url.Host != "example.com") && (request.Url.Host != "www.example.com")) 
    { 
     response.Clear(); 
     response.Write("Unauthorized domain name: " + request.Url.Host); 
     response.End(); 
    } 
} 
</script> 
2

Ceci est ma solution. Cela fonctionne vraiment vite et a résolu mon problème.

Insérer ce code dans votre .htaccess

RewriteCond %{HTTP_HOST} !^www.higueyrd.com$ 
RewriteRule ^/?(.*) http://www.higueyrd.com/$1 [QSA,R=301,L] 

Il suffit de mettre votre domaine.

Questions connexes