Obliger à rentrer par le site pour accéder à un forum

Nouveau WRInaute
Bonjour à tous,

Tout d'abord, j'ai bien lu tout ça, mais il doit bien me manquer quelques bases... :(



J'ai un site en PHP que j'ai fait avec DAlbum et auquel on accède par une page de login. L'adresse du site est du type www.example.com.

J'ai un forum PunBB, également en PHP, auquel on peut accéder par un lien placé sur le site. L'adresse du forum est du type www.example.com/forum/index.php

Ce site et ce forum sont à usage strictement privé puisque pour un groupe famille-amis qui sont un peu éparpillés partout dans le monde.


Ce que je cherche à faire, c'est de ne pouvoir accéder au forum que si l'on passe préalablement par le site. Je ne veux pas que l'on puisse accéder au forum plus ou moins directement et que l'on s'y inscrive.

Je souhaiterais que ce ne soit qu'après être passé par le site, que l'on puisse s'inscrire sur le forum.

Autrement dit, je souhaiterais qu'on ne puisse même pas s'enregistrer sur le forum, si l'on a pas préalablement été invité sur le site.

En revanche, après être passé par le site et s'être loggé au forum, il faudrait que l'utilisateur ne soit pas gêné de quelques manières que ce soit (le forum utilise les cookies permettant de reconnaître l'utilisateur). Or il ya un petit (?) problème.



J'ai une solution quasi-parfaite avec .htaccess et le Referer (voir le code ci-dessous), mais il y a juste un petit point qui bloque.

En effet, quand j'ai une redirection interne et automatique après le login ou l'envoi d'un message, bref dès qu'il y a (si mon interprétation est la bonne) une URL qui contient php?, alors c'est comme si le Referer n'était pas reconnu.

Donc pour l'instant j'essaye d'apprendre comment faire en sorte que TOUTES les URL contenant le terme monsite.com soient reconnues comme telles. Même s'il y a crac-boum-hue écrit devant ou crac-boum-hue écrit derriere...

Pour l'instant il y a ça écrit dans mon .htaccess

Code:
SetEnvIfNoCase Referer "^http://www.monsite.com/" local_ref=1
Order deny,allow 
deny from all 
allow from env=local_ref


Et ça marche bien : tout ce qui ne vient pas de www.monsite.com est effectivement rejeté (Erreur 403) quand on essaye par exemple, avec www.example.com/forum/register.php ou www.example.com/forum/login.php ou bien encore www.example.com/forum/index.php.

Alors, en fait le plus simple pour moi serait juste de compléter ce code pour atteindre le but décrit ci-dessus.

Bien sûr, si c'était possible, j'aimerais bien parvenir à mes fins sans avoir à refaire tout le site et le forum :?

Si c'est possible, je suis preneur ;)


Merci beaucoup, déjà, d'avoir lu tout ça :oops: et pour votre aide, si vous pouvez...

Lim :)

PS : Au fait, j'espère que j'ai posté dans le bon forum... :?

Edit HawkEye: example.com svp
 
WRInaute occasionnel
Bonjour,
personnellement je n'utiliserai pas une technique basée sur le referer, car cette donnée n'est pas assez fiable sachant qu'on peut facilement soit la désactiver soit la changer avec certains navigateurs.
Je pense qu'une simple variable de session serait suffisante, tu l'initialiserais sur la page d'accueil de ton site et ensuite, a chaque page de ton forum tu testes si cette variable a été initialisée, si ce n'est pas le cas tu renvoies l'utilisateur sur ta page d'accueil. Au moins y a pas besoin de cookies, et ce système se programme en très peu de temps...
Voilà, j'espère avoir pu t'aider.
 
Nouveau WRInaute
Bonsoir Phix,

Merci pour ton aide.

Effectivement, cette solution m'a déjà été proposée mais je l'écarte - pour le moment - pour 3 raisons :

1) Le site et le forum ne sont pas si importants que ça, ils sont juste à usage privé.

2) Je ne suis pas loin (je l'espère) d'un solution avec le .htaccess (voir plus bas).

3) Enfin, le site (DAlbum) et le forum (PunBB) sont générés dynamiquement et, si je suis capable d'y inclure quelques lignes de programmes, je suis totalement incapable de les écrire car ignorant de ces choses savantes.



Pour ce qui du .htaccess, j'ai progressé dans le sens où je pense avoir identifié le fait qu'il ne sache pas interpréter le code suivant qu'il y a dans la page qui précéde l'Erreur 403 :

Code:
<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="refresh" content="5;URL=http://www.monsite.com/forum/index.php" />
<title>Forum de monsite.com / Redirection</title>
<link rel="stylesheet" type="text/css" href="style/Hydrogen.css" />
</head>
<body>

<div id="punwrap">
<div id="punredirect" class="pun">

<div class="block">
	<h2>Redirection</h2>
	<div class="box">
		<div class="inbox">
			<p>Connexion r&eacute;ussie. Redirection &hellip;<br /><br /><a href="http://www.monsite.com/forum/index.php">Cliquez ici si vous ne voulez pas attendre (ou si votre navigateur ne vous redirige pas).</a></p>
		</div>
	</div>
</div>



</div>
</div>

</body>
</html>

Et plus particulièrement la partie Meta Refresh puisque si je clique sur le lien de redirection proposé, je ne rencontre alors pas de problème.

Le lien est donc reconnu par le .htaccess, mais pas le "Refresh".

Y a-t-il donc un moyen de faire reconnaître ce "Refresh" par le .htaccess ?
 
Nouveau WRInaute
Bon, comme ma question n'a pas l'air d'inspirer grand monde et que j'ai un peu progressé dans mes recherches, je m'en vais la reformuler - je l'espère - plus explicitement.


Sur mon forum, j'ai une page de redirection automatique qui contient une ligne que j'appelle - abusivement peut-être - "Meta Refresh" de ce type :

Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="refresh" content="5;URL=http://www.monsite.com/forum/index.php" />

D'autre part, je souhaite ne pouvoir laisser accéder au forum que ceux qui proviennent de monsite.com

J'ai donc écrit le .htaccess suivant :

Code:
SetEnvIfNoCase Referer "^http://www.monsite.com/" local_ref=1
Order deny,allow
deny from all
allow from env=local_ref


Cela fonctionne bien, hormis que le Meta dont je parle plus haut n'est pas reconnu par le .htaccess, et donc, quand apparaît la page de redirection automatique, j'obtiens une Erreur 403.

Seulement, si je clique sur le lien pour ne pas attendre, tout se passe normalement.

J'en déduis donc que c'est la fonction Redirection Automatique du "Meta Refresh" qui n'est paas reconnue par le code écrit dans le .htaccess.

Ma question est donc la suivante : comment faire pour que le "Meta Refresh" soit lui aussi reconnu comme provenant d'une page de monsite.com ?

On pourrait penser à quelque chose du style :

Code:
SetEnvIfNoCase Referer "^http://www.monsite.com/" local_ref=1
SetEnvIfNoCase Referer "Meta Refresh" local_ref=1
Order deny,allow
deny from all
allow from env=local_ref

Bien sûr, ce n'est pas ça, mais c'est juste pour vous donner une idée de ce que je recherche.

Je ne connais pas la syntaxe de programmation en générale, et celle de .htaccess en particulier...

Si quelqu'un pouvait m'aider :)

Merci à vous
 
WRInaute occasionnel
Essaie de vérifier:
Code:
SetEnvIfNoCase Referer "^http://www.monsite.com/" local_ref=1
je ne m'y connais pas trop en expressions régulières et en htaccess, mais n'est-ce pas cette variable: %{HTTP_REFERER} qui te donne l'adresse de referer?

Pour ce qui est de la technique des sessions dont je t'ai parlé, tu as juste quelques lignes à rentrer:
Lorsque tu as authentifié le passage par la page d'accueil
Code:
$_SESSION['authentifie'] = 1;

et,
au tout début de ta page qui génère les pages de ton forum (regarde l'index.php):
Code:
session_start();
if(! (isset($_SESSION['authentifie']) && $_SESSION['authentifie'] == 1) ) {
//variable non initialisée donc redirection vers la page d'accueil
}

C'est quand même assez simple non? :)

Bonne soirée et bon courage...
 
Nouveau WRInaute
Bonsoir Phix,

Merci pour tes encouragements :D

Alors soit je n'ai compris et/ou fait ce qu'il fallait, soit y a un autre problème, mais ça ne marche pas :(

Voici ce que j'ai fait.

J'ai mis
Code:
$_SESSION['authentifie'] = 1;
au début du code dans la page d'accueil du site qui suit celle de login (qui est une page index.php)

puis

j'ai mis
Code:
session_start(); 
if(! (isset($_SESSION['authentifie']) && $_SESSION['authentifie'] == 1) ) { 
//variable non initialisée donc redirection vers la page d'accueil 
}
au début du code de la page index.php du forum (qui n'est pas la même que celle du site, évidemment).

Ca doit être plus compliqué que ça :?
 
WRInaute occasionnel
Alors soit je n'ai compris et/ou fait ce qu'il fallait, soit y a un autre problème, mais ça ne marche pas
Qu'est-ce qui ne marche pas? As-tu des erreurs php?
Fais bien attention à ce que session_start() soit la premiere instruction de ta page, il ne doit rien avoir avant, meme pas un espace ou un retour a la ligne. Tu dois aussi mettre ce session_start() au début de la page dans laquelle tu placeras l'authentification ("la page d'accueil du site qui suit celle de login"), cette fonction permet d'activer l'utilisation des variables de sessions dans une page php.

Essaie de faire un:
Code:
<?
session_start(); 
if(! (isset($_SESSION['authentifie']) && $_SESSION['authentifie'] == 1) ) { 
echo "pas authentifie";
} 
else {
echo "authentifie";
}
?>
pour voir si la variable est initialisée ou pas...
 
Nouveau WRInaute
Désolé pour le retard de ma réponse. Suis un peu à fond...

Quand je dis que ça ne marche pas, cela signifie que j'ai toujours une Erreur 403 quand la redirection se fait automatiquement.
Quand elle est manuelle, cela a toujours bien fonctionné : le .htaccess ne pose pas de problème.

Mais je ne suis pas du tout sur d'avoir fait correctement ce que tu me proposais plus haut, d'autant que je ne saisi pas ce que tu veux dire par "essaie de faire un [...] pour voirsi la variable est initialisée ou pas".

J'ai peut-être omis de dire que je ne connaissais rien à la programmation... :o
 
Nouveau WRInaute
Bon me revoilou pour un essai avec les headers.

Si vous avez bien saisi mon souhait de ne pouvoir acceder à un forum que par le seul lien placé sur mon site, je souhaiterais connaître votre avis sur le point suivant.

Le site est fait avec DAlbum. Il est possible d'y inclure un code empêchant le HotLinking.
Comme le principe recherché est relativement proche (me semble-t-il), pensez-vous possible d'adapter ce code pour faire en sorte qu'aucune page du forum (se trouvant dans le répertoire www.example.com/forum/ ), ne puisse être affichée sans venir de monsite.com ?

Merci pour votre aide,


Edit HawkEye: example.com svp
 
Discussions similaires
Haut