2009-07-24 18 views

Répondre

16

Ceci n'est cependant pas possible.

<iframe src="mypage?iframe=yes"></iframe> 

puis vérifiez si le Serverside querystring contient iframe = yes ou avec l'en-tête Referer envoyer par le navigateur.

+2

merci, mais cela ne résout pas mon problème car je veux que la page soit accessible uniquement si dans une iframe (pour des raisons de sécurité). ajouter quelque chose à la chaîne de requête est trop facile à faire pour être sûr. – pistacchio

+13

Si c'est pour des raisons de sécurité, alors vous faites quelque chose de mal. Au mieux, la seule chose qui pourrait vous aider à être dans un iframe est un referer. Et même cela est forgeable. La sécurité est assurée par des contrôles d'accès et de validation, et non par des réseaux d'hypothèses fragiles. – Yuliy

3

Il n'y a aucun moyen de vérifier cela qui répondra à votre exigence de "sécurisé" comme indiqué dans votre commentaire sur la réponse @ WTP.

1

Je ne pense pas que le côté serveur peut faire cela, alors pourquoi ne pas mettre un contrôle caché dans votre page qui sera dans l'iframe? Lorsque l'URL de l'iframe se charge, vous pouvez ajouter du code côté client pour définir l'entrée cachée pour indiquer que vous êtes dans un iframe. Le moyen le plus contrôle serait sur le côté client dans une méthode onload, comme ceci:

// Set hidden input 
someHiddenInput.value = self != top 

Il est plus sûr que le querystring, mais il pourrait ne pas être encore assez de sécurité pour vous.

Mes 2 cents.

6

Utilisez le code suivant dans le formulaire:

<asp:HiddenField ID="hfIsInIframe" runat="server" /> 
<script type="text/javascript"> 
    var isInIFrame = (self != top); 
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame); 
</script> 

Ensuite, vous pouvez facilement vérifier si elle est un iFrame dans le code-behind:

bool bIsInIFrame = (hfIsInIframe.Value == "true"); 

a été testée et a travaillé pour moi.

Modifier: Veuillez noter que vous avez besoin de jQuery pour exécuter mon code ci-dessus. Pour l'exécuter sans jQuery il suffit d'utiliser un code comme le code suivant (non testé) pour définir la valeur du champ caché:

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame; 

Edit 2: Cela fonctionne uniquement lorsque la page a été chargée une fois. Si quelqu'un a des idées pour améliorer cela, faites le moi savoir. Dans mon cas, heureusement, je n'ai besoin de la valeur qu'après une publication.

+1

cela devrait être la réponse. –

+2

no @RoyiNamir, ce n'est pas une solution côté serveur;) – tetri

+1

@tetri, avec ce code, vous pouvez vérifier depuis le serveur si vous êtes dans un iframe. Je suis d'accord, il y a du code client, mais à mon avis, c'est la meilleure solution parce que ça ne fait pas attention à la façon dont la page est appelée. La réponse acceptée en cours requiert que la valeur de la requête soit définie dans chaque iframe, ce qui risque d'être oublié. – Undercover1989

Questions connexes