Help ! interdire une url (j'offre 100 euros au vainqueur)

Nouveau WRInaute
bonjour,
j'ai donc une url de type : www.example.com/form.php?affi=jean&user=new
elle se rewrite aussi sous www.example.com/jean-user-new.html

Je cherche à bloquer l'accés direct ou referer à cette page dynamique.
Sachant que tout les "affi" sont des membres ayant ce même type d'url
tout se fait de façon automatique sur le site
et le mec ayant payé sur paypal revient sur cette page dynamique qu'on lui autorise DEPUIS ET SEULEMENT EN PROVENANCE DE PAYPAL.
Paypal utilise la méthode http-equiv="refresh"

j'ai l'impression que je me plante de flags ......

cahier des charges:
on bloque tous les accés directs à form.php
on bloque tous les referers à form.php
on autorise seulement le refresh depuis paypal vers les pages:
www.example.com/form.php?affi=jean&user=new
www.example.com/form.php?affi=jacques&user=new
www.example.com/form.php?affi=robert&user=new

ou si plus facile avec les pages rewritées:
www.example.com/jean-user-new.html
www.example.com/jacques-user-new.html
www.example.com/robert-user-new.html

l'outil ne devra pas utiliser de htpasswd

j'ai essayé :
RewriteRule (.*)-([^-]+)-([^-]*)(.*)\.html$ /$1.php?affi=jean&user=new [L]


RewriteCond %{HTTP_REFERER} !^http://www.example.com [NC]

RewriteCond %{HTTP_REFERER} !^http://www.PayPal.com [NC]

RewriteCond %{HTTP_REFERER} !^http://PayPal.com [NC]

RewriteRule /* http://www.example.com [R,L]



d'avance merci a ceux qui aurait une idée.
j'offre 100 euros par paypal au premier qui m'aura fournit un bout de code valable et que nous aurons testé.
 
WRInaute discret
:? J'vais ptet dire une grosse connerie mais pourquoi tu passerais pas directement dans le php avec un truc dans le style de :
Code:
if ($affi=="" || $user="" || $HTTP_REFERER=="") {
location.href='htpp://www.example.com';}
else {
location.href="http://www.example.org';
}
 
Nouveau WRInaute
dubstyle a dit:
:? J'vais ptet dire une grosse connerie mais pourquoi tu passerais pas directement dans le php avec un truc dans le style de :
Code:
if ($affi=="" || $user="" || $HTTP_REFERER=="") {
location.href='htpp://www.example.com';}
else {
location.href="http://www.example.org';
}


mais non je veux pas rediriger, je veux que cette url soit atteignable juste par paypal, j'ai essayé ta solution et de toute facon si affi vide et user vide mon php n'affiche pas le form c'est logique.
En plus paypal entre dans la condition referer vide puisque ce dernier fait une requete refresh.
 
WRInaute occasionnel
tony006
je vois maintenant pourquoi vous avez levé le pari
ce n'est pas évident, http_refferer n'est pas fiable, il peut être supprimée/modifiée par le site d'origine, par le navigateur (par mesure de sécurité notamment avec https) et par des pirates probablement. donc à écarter totalement. toutefois c'est d'abord votre besoin réel qui compte, et je sens qu'une solution existe.
il me semble que vous utilisez une redirection automatique de paybal vers le site, et vous permettez déjà l'accès au contenu payant. même si je connais pas très bien paybal voici mes remarques :
1) avec cette méthode ête vous sure que le paiement est effectivement réalisé? ou ce n'est pas important?
2)même si vous connaissez le referrer est transmis ce n'est pas la meilleur solution. car suppsons que la fenêtre a été fermée avant que votre script ne soit exécuté, le client ne peut plus accéder, doit il payer une deuxième fois?

voici deux piste qui me semblent possible:
1) dans le lien de paiement qui renvoi vers paybal mettre une varible totalement invisible par l'utilisateur et qui doit être envoyée à paybal (et enregistrée dans votre BD). paybal doit vous retourner cette variable.
2) exploitation de la notification instantannée de paybal par un script.
on peut approfondir les différents scénarii si vous voulez mais que pensez vous déjà des pistes proposées.
 
Nouveau WRInaute
nodom a dit:
tony006
je vois maintenant pourquoi vous avez levé le pari
ce n'est pas évident, http_refferer n'est pas fiable, il peut être supprimée/modifiée par le site d'origine, par le navigateur (par mesure de sécurité notamment avec https) et par des pirates probablement. donc à écarter totalement. toutefois c'est d'abord votre besoin réel qui compte, et je sens qu'une solution existe.
.
donc on écarte le referer qui est bypassable
nodom a dit:
il me semble que vous utilisez une redirection automatique de paybal vers le site, et vous permettez déjà l'accès au contenu payant.
.
non, c'est paypal qui permet d'indiquer un champ hidden nommé "return_url" cela permet de configurer une thank you page qui retourne (par la méthode refresh) l'acheteur vers le site payant.
Mon idée et de proposer sur cette page de retour un formulaire d'enregistrement.
nodom a dit:
même si je connais pas très bien paypal voici mes remarques :
1) avec cette méthode ête vous sure que le paiement est effectivement réalisé? ou ce n'est pas important?
.
justement si, on bloque :
tous les accés direct :
- offline page formulaire sauvegardé
- lien envoyé par email,
- lien mis en favoris

tous les accés referer
- lien vers la page formulaire balancé sur d'autres sites internet de hack
- lien clic droit enregistrer sous
nodom a dit:
2)même si vous connaissez le referrer est transmis ce n'est pas la meilleur solution. car suppsons que la fenêtre a été fermée avant que votre script ne soit exécuté, le client ne peut plus accéder, doit il payer une deuxième fois?
.
la page ne doit pas être completement bloqué mais si elle est accédé directement ou par une mise en favoris, on n'affiche plus le formulaire mais une information en cas de probleme et l'email admin. Le client peut solliciter le vendeur car il reçoit une note paypal avec les références du vendeur et donner son numéro de transaction paypal
nodom a dit:
voici deux pistes qui me semblent possible:
1) dans le lien de paiement qui renvoi vers paybal mettre une varible totalement invisible par l'utilisateur et qui doit être envoyée à paybal (et enregistrée dans votre BD). paybal doit vous retourner cette variable.
.
on ne peux pas cacher cette variable car :
Le client dans la page avec le bouton paypal fait "afficher source" il voit le code en clair et ainsi les champs hidden, n'importe quel petit webmaster, saura pirater cela.
nodom a dit:
2) exploitation de la notification instantannée de paypal par un script.
on peut approfondir les différents scénarii si vous voulez mais que pensez vous déjà des pistes proposées.
on pourrai demander au visiteur dans le formulaire d'écrire le numéro de transaction, mais le script doit pouvoir vérifier ce numéro et la je n'ai pas l'algorythme paypal pour vérifier
pistes interressantes mais pas de solution....
j'ai pourtant chercher sur :
http://www.paypaldev.org/default.asp
un site existe avec cette solution : http://www.votre-mailing-list.com/index.php?pg=debut_inscrip donc si on affiche le source dans le form paypal on a : return_url = http://www.votre-mailing-list.com/inscription.php
donc on se dit : facile je peux pirater et la lorsque l'on va sur cette page :
http://www.votre-mailing-list.com/inscription.php
message : Cette page n'est pas accessible directement
-J'ai essayé de faire un refresh d'un de mes sites vers cette url = page vérouille,
- J'ai essayé une page web sur mon ordi et faire clic droit enregistrer sous c'est pareil
 
WRInaute occasionnel
voilà à mon sens la solution:
1) le formulaire ne doit pas poster vers paybal mais vers paybal.php
2)paybal.php récupère les infos postées, génère un code et l'enrgistre dans la BD ou autre, ajoute le code aux éléments postés et poste le tout vers paybal.com
3)paybal.com doit retourner le code posté qui vous servira à vérifier...
qu'en pensez vous?
 
Nouveau WRInaute
nodom a dit:
voilà à mon sens la solution:
1) le formulaire ne doit pas poster vers paybal mais vers paybal.php
2)paybal.php récupère les infos postées, génère un code et l'enrgistre dans la BD ou autre, ajoute le code aux éléments postés et poste le tout vers paybal.com
3)paybal.com doit retourner le code posté qui vous servira à vérifier...
qu'en pensez vous?


j'ai rien compris nodom :oops:

bon j'ai un bout de la soluce qui devrait servir à pas mal de monde :
LA BALISE REFRESH UTILISE LA METHODE GET
UN CLIC REFERER (donc un lien simple) UTILISE LA METHODE GET

donc voiçi ce que j'ai fait et qui marche en partie:


// analyse de la méthode de requête employé pour attérir sur la page
$referer = getenv( "REQUEST_METHOD" );
$tapps_referer = "GET";

// on trace un peu le visiteur :
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$ip = getenv( "REMOTE_ADDR");

if (isset($tapps_referer) && $tapps_referer!="")
{
// si la méthode est bien GET alors faire
if ($tapps_referer == $referer)
{
// si referer est vide alors on affiche tout
if($HTTP_REFERER=="")
{
echo "bla bla FORMULAIRE D'ENREGISTREMENT<br><br>";
}

// si le referer est pas vide on affiche non
else
{
echo "FORMULAIRE INTERDIT DE CETTE FACON<br>";
}
}

// dans tous les cas on affiche :
echo "<br> Venant de la page : <br><b>";
echo $HTTP_REFERER;
echo "</b><br> adresse IP : <br><b>";
echo $ip;
echo "</b><br> Identifiant Machine Provider : <br><b>";
echo $hostname;

// on peut même faire une log ou une fonction mail() admin

}


donc effectivement :
- si on clic sur un lien (GET) referer pas vide donc : NON
- Si on utilise la balise refresh (GET) referer vide donc : OUI
 
Nouveau WRInaute
CAHIER DES CHARGES NON REMPLI :


- empecher un clic (lien vers la page d'enregistrement) direct (favoris sur le bureau ou dans les bookmarks)
- empecher un clic (lien vers la page d'enregistrement) à l'interieur d'un email.
- bloquer le refresh uniquement sur Paypal (htaccess ? )



par exemple : un type envoi un email à son pote :
"tiens pour t'enregistrer gratuitement clic ici sans payer !!!"
 
WRInaute occasionnel
tony006,
voici le code qui vous permet non seulement de vérifier l'origine mais surtout si le paiement a été effectué ou non., si le code php de vérification en pode paiement instanné. si vous n'arrivez pas à le décoder en l'étudie ensemble:
PHP 4.1

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>
 
Nouveau WRInaute
nodom a dit:
tony006,
voici le code qui vous permet non seulement de vérifier l'origine mais surtout si le paiement a été effectué ou non., si le code php de vérification en pode paiement instanné. si vous n'arrivez pas à le décoder en l'étudie ensemble:
PHP 4.1

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>

Bonjour à tous !

Voilà, je me permerts de "squatter" ce post car vous parlez d'un script (Paypal) que j'utilise mais que je n'arrive pas à faire fonctionner.

En effet, les 3/4 des variables postées ($payment_status....) sont vides.

J'aimerai en connaitre la raison. Avez vous une idée ?

Merci pour votre aide !
 
Discussions similaires
Haut