Controle d'ip par user comment gerer ? +obligation de se loguer

Controle d'ip par user comment gerer ? +obligation de se loguer - PHP - Programmation

Marsh Posté le 06-09-2005 à 01:22:53    

Bonjour je vous expose mon probleme
 
jai ouvert un website, et jaimerais qu'il ne soit accessible que par des personnes inscrites dans ma base de donnée, ou que jai décidé dinscrire.
Chaque personne aura son login, et son mot de passe ET (tres important), une restriction ip, que la personne me fournira
(si elle a une ip fixe, jajoute son ip et elle ne pourra que se connecter depuis cette ip)
 
Pour l'instant, la solution a laquelle j'ai pensé, et qui en théorie est adaptable a mon probleme est le HTACCESS
maintenant je ne suis pas sur que cette solution soit la plus ergonomique, si je dois souvent ajouter des ip autorisée par accompte, voir ajouter des nouveaux accomptes tout simplement :
 
1/ Pour la solution htaccess, comment gerer lajout d'accompte, et la restriction d'ip PAR ACCOMPTE svp ?
jai cherché et je n'ai trouvé que la restriction ip, d'une page, mais pas par accompte..
 
2/ Existe-il un script PHP opensource, qui arrangerait tt mes problemes ?
(bien que le htaccess reste la solution la plus correct)
 
3/ Existe til tout simplement, un logiciel, ou script, qui gere automatiquement les htaccess, et donc qui me permettrait de facilement mettre à jour mes fichiers a partir dune interface : Créer accompte, ajout ip autorisé sur un compte, editon etc..
 
 
Merci davance
jose espérer que qq1 ici pourra m'aider ;)


Message édité par AliaS le 06-09-2005 à 03:13:41
Reply

Marsh Posté le 06-09-2005 à 01:22:53   

Reply

Marsh Posté le 06-09-2005 à 01:38:24    

Citation :

jai ouvert un website, et jaimerais qu'il ne soit accessible que par des personnes inscrites dans ma base de donnée, ou que jai décidé dinscrire.

Si tu vérifies d'un côté l'utilisateur dans ta bdd et de l'autre l'IP par htaccess, tu ne pourras pas associer un utilisateur particulier à une IP. De plus, ce que tu veux faire est très simple à mettre en oeuvre en PHP :

Code :
  1. if($_SERVER['REMOTE_ADDR'] === '127.0.0.1'){
  2. echo 'Bienvenue localhost !';
  3. }else{
  4. echo 'Non autorisé';
  5. }


Puisque tu dois vérifier le login des utilisateurs, tu peux stoquer l'IP dans un champ de ta bdd, et faire la vérification à partir de ce champ.


Message édité par kalex le 06-09-2005 à 01:39:23
Reply

Marsh Posté le 06-09-2005 à 01:44:46    

merci kalex
ca méclairci pas mal
 
mais en fait cest plus complexe que ca
jsuis encore perdu dans mon truc
 
jai un shop, privé (type ven t e pri vee )
et jai deja une bdd dutilisateur
 
je veux en fait que dorénavant il devienne privée, et donc qu'on ait plus acces au site, mais dabord a une page dentrée + soit htaccess, soit login obligatoire (mais donc pas possibilité de sinscrire)
 
 
alors dapres ce que tu dis, (et qui méclairci un peu), ce que je pourrais faire,
cest de limiter le site aux utilisateurs inscrits, donc faire une verif sur mon index, et donc si pas loggué, renvoi sur une page login.php
donc, le premier probleme est réglé : celui de la restriction aux utilisateurs inscrit
 
2eme probleme : ensuite sur cette meme page login, jajoute un control de l'ip quand la personne se log
avec un simple if conditionnel.
ip qui sera chopée dans la bdd, et comparée à celui qui se log.
 
il faudrait donc que je crée dans l' admin, un moyen d'ajouter plusieurs ip dans la bdd , dans le champ de lutilisateur..
 
question :
1/ est-ce que ce que je dis se tient ? :D
2/ est-il possible de ne faire de vérif que sur un mask de l'ip, par exemple 121.121.121.* (dernier chiffre peu etre nimporte lekel)
3/ il nya plus besoin du htaccess, mais la il va falloir que je prenne d cours sever en PHP :D
 
merci kalex pr ton aide ;)

Reply

Marsh Posté le 06-09-2005 à 01:48:55    

(ps : je suis débutant en php, sql, jai juste qq notions de structure, donc je pe reflechir a comment faire, mais pas le faire)

Reply

Marsh Posté le 06-09-2005 à 02:14:15    

Pas de problème pour vérifier qu'une partie de l'IP, regarde du côté des expressions régulières.
 
Mais si tu veux associer plusieurs IP à un seul utilisateur, tu vas devoir faire deux tables en relation (avec des clefs étrangères c'est mieux, mais tu peux t'en passer dans un premier temps). Par exemple je verais bien ça comme ça :

Table user
ID | NAME | PASS
1  | Untel | pass
 
 
Table user_ip
USER_ID | ADDRESS_IP
1       | 127.0.0.1
1       | 192.168.0.2
1       | 192.168.0.3


(tu as compris que c'est le champ USER_ID de la table user_ip qui est en relation avec l'ID de la table user)
 
Et la requête SQL (avec une jointure entre le 2 tables) ressemblerait à ça :

SELECT 1 FROM user U
LEFT JOIN user_ip I ON I.USER_ID = U.ID
WHERE NAME = "Untel" AND PASS = "pass" AND ADRESS_ID = "$_SERVER['REMOTE_ADDR']"

Reply

Marsh Posté le 06-09-2005 à 02:20:11    

merci pour tte tes indications, mais je manque grave de temps, bien qu'ayant pas mal de connaissances, jai tres bien compris ce que tu mas expliqué ;)
tu code en PHP ? tu me prendrais combien pr faire un truc comme ca ? :D
ajout dans la console dadmin d'un petit module rapide avec formulaire, ou jpe editer les ip,
 
puis la requete de test de l'ip lors du login.
 
;)
 

Reply

Marsh Posté le 06-09-2005 à 02:28:21    

Dis moi que ton site utilise une entête communne pour toutes les pages et là je veux bien le faire, sinon ca va être long et chiant.


Message édité par dwogsi le 06-09-2005 à 02:28:37

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 06-09-2005 à 02:32:12    

oui
j'inclue un top.php qui est présent a chaque page
 
il sufit de foutre le test conditioonnel dans ce top .php et cest reglé
enfin + qq trucs
 
 
 
comme je l'ai dis a kalex en MP, je suis pas trop fortuné donc on pourrait sarranger, tu pourrais acceder au site gratuitement et avoir des prix suir mes produits
puis cest pas trop trop de taf a faire comme dit
 
-crée la table en question (des ip), lié a la table user,
-crée le formulaire (module) dans mon admin (quelques requete SQL, select, et ajout d'ip dans la bdd)
-ajouter la requete pr controle d'ip, dans mon entete commune
 
(la requete pour obliger a se logguer je l'ai deja) , donc cest un probleme de regler
 
je me demande meme si une ame charitable pourrait aider a faire ca gratuitement ^^
cest pas sorcier a vu doeil, mais je ne my connais pas assez nivo syntax php

Reply

Marsh Posté le 06-09-2005 à 02:39:47    

Bon alors tu explique au mieux ce que tu veux et tu m'envois ca par MP ensuite on verra bien, si ya pas trop à faire je serais bien charitable.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 06-09-2005 à 02:43:22    

je fais un txt, et je vous envoi ca
 
ca doit pas etre sorcier a priori
avec ce que kalex ma expliqué
meme moi je me sentiré bien dessayer, mais jai peur un peu de planter tout le dev, netant pas un expert de la syntax php sql..
 
a t'aleur :P ou demain

Reply

Marsh Posté le 06-09-2005 à 02:43:22   

Reply

Marsh Posté le 06-09-2005 à 03:11:41    

Alors
tout dabord merci pr laide ;)
soit en sur que jen serais reconnaissant comme je le pourrais
je suis sincere, je trouve vous trouve d'une générosité déconcertante de vouloir aider, et contribuer
 
VEnons en au truc :
 
Le shop est sur la base d'un OScommerce, que j'ai modifié pour ladapté a mon design
 
mais il y a toujours un  
  require("includes/application_top.php" );
 
qui traine
et cest dans ce fichier que tout se passera donc :
 
A developper :
1/  Test pour voir si la personne est loguée, si elle n'est pas loguée, envoi sur la page login.php
-> en utilisant les fonctions définies de mon script , ca donne :
 

Code :
  1. if ( (!tep_session_is_registered('customer_id'))  &&  (!strstr($_SERVER['PHP_SELF'],'login.php')) ) {
  2.   $navigation->set_snapshot();
  3.   tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  4. }


 
 
si ca vous interesse de voir les fonctions tep_session_is_registered(), tep_redirect(), et tep_href_link()
cest assez simple
la fonction redirect ben redirige vers une autre page
 

Code :
  1. // Redirect to another page or site
  2.   function tep_redirect($url) {
  3.     if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page
  4.       if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url
  5.         $url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL
  6.       }
  7.     }
  8.     header('Location: ' . $url);
  9.     tep_exit();
  10.   }


 
la fonction href_link, cest pour foutre un lien, qui fait suivre les sessions ;)
 
pour les sessions ca doi parler de soi aussi

Code :
  1. function tep_session_register($variable) {
  2.     global $session_started;
  3.     if ($session_started == true) {
  4.       return session_register($variable);
  5.     } else {
  6.       return false;
  7.     }
  8.   }
  9.   function tep_session_is_registered($variable) {
  10.     return session_is_registered($variable);
  11.   }


 
 
voila
//
 
de toute facon le 1/ est clo, je pense que le code est bon
il vérifie si le mec est loggué, si ce nest pas le cas, renvoi sur la page login.php, sinon ben acces au site  
 
------------------------
2/ Controle d'ip pendant le login  
 
Coté admin :
- Dans l'admin
un ptit formulaire avec la liste des utilisateur (en menu déroulant ?)
-> une ptite requete select, dans la bdd d'user
 
ADD - EDIT - REMOVE, pour les ip de l'utilisateur
possibilité de travailler par mask (cest la que tou se corse a mon avis, dans ce que je demande :cry:) , par exemple , que je puisse add des ip, genre
81.56.35.*, voir meme 81.56.*.*
 
-> au préalable, on aura crée la table des ip user, et lié celle ci a celle des user (cf. KALEX)
 
*----*
Coté User :
- toujours dans mon application_top.php, entete de chaque fichier, de mon site
dans le meme controle conditionnel du login ?
-> vérifier si l'ip du mec, coordonne avec l'ip entrée dans la bdd, pour ce meme utilisateur spécifié dans le formulaire de login.
-> test condition if, + requete select pour l'ip, + travaille sur les mask :cry: (*.*)
 
 
 
 
voila
jespere avoir été assez clair
a vu doeil ca a pas lair sorcier pr qq1 qui maitrise
moi je me sens pas de le faire seul :o
Si vous ne connaissez pas les fonctions dispo je peux vous envoyez mes fichiers fonctions, mais le mieu cest de faire ca comme ca, et si je peux optimiser avec mes fonctions deja existantes, je le ferais ;)
 
 
merci davance les gars
franchement vs assurez


Message édité par AliaS le 06-09-2005 à 03:12:51
Reply

Marsh Posté le 06-09-2005 à 03:22:43    

Il est un peu tard, j'ai les yeux qui se croisent pour t'aider, dsl. :o Demain, si je peux.
 
Mais avant d'aller au lit : c'est du osCommerce donc :
- Le code est a chier (c'est un avis tres perso sur oscommerce :o)
- Oscommerce a plein de modules. Renseigne-toi sur un forum oscommerce, ça serait bête de ne pas en profiter au cas où un truc dans le genre serai déjà fait.
 
Bonne nuit.


Message édité par kalex le 06-09-2005 à 03:23:11
Reply

Marsh Posté le 06-09-2005 à 03:51:29    

salut
le code de oscommerce, je sais pas je suis pas expert, mais cest simple a installé (un peu moins a customizer), mais jy suis arrivé et jai un shop nikel (adapté a mon design je veux dire) , sans rien y connaitre :D en prog
 
concernant les modules c deja fait, cest dailleur la que jai trouvé le code pour forcer le login
mais pour la gestion d'ip, je pense pas que ca existe, jai demandé ;)

Reply

Marsh Posté le 06-09-2005 à 19:01:27    

Le problème c'est que je ne connais pas bc osCommerce et le peux que j'en ai vu c'etait pas terriblement organisé. Donc, à toi de voir où placer le code pour que ça reste propre... où alors tu te fous que ça reste propre et là t'as fini dans rien de temps. :D
 
Tiens, j'avais un vestige d'une installation osCommerce dans ma bdd, pour rester cohérent, le schéma de ta table pour les IP devrait ressembler à ça :

CREATE TABLE customers_ipcheck(
 customers_ipcheck_id int auto_increment primary key,
 customers_id int,
 customers_adress_ip char(15)
);


 
Concernant la vérification d'IP, regarde ce lien (en bas de la page), c'est un peu ce que tu veux (pas besoin de faire appel à la base de donnée une fois la session crée) :
http://www.phpindex.com/articles/a [...] lement=182 (à adapter avec du code PHP d'ajoud'hui)
 
Pour la vérification partielle de l'IP, tu peux faire avec une regex.

Code :
  1. if(preg_match('/81\.56\.[0-9]{1,3}\.[0-9]{1,3}/', '81.56.3.6')) echo 'ok';
  2. // Pour contruire la regex, tu peux faire à partir de l'IP de la bdd :
  3. $ips = explode('.', '81.56.0.60');
  4. // Et...
  5. if(preg_match('/'.$ips[0].'\.'.$ips[1].'\.[0-9]{1,3}\.[0-9]{1,3}/', '81.56.3.6')) echo 'ok';

Reply

Marsh Posté le 06-09-2005 à 23:54:16    

yop
le pour la creation de table, ok
 
par contre le reste je n'ai pas trop compris :(
 
comment ne pas faire appel a la base de donnée ? étant donné que l'ip a vérifiée est stockée dedans.
 
ensuite , pour ton sccript de verif, comment faire pour l'ip check, puisque celle ci n'est pas 81.56.*.* , mais une ip piochée dans la table que tu as crée au dessus ? pourrais tu donner un exemple avec user id 1 par exemple, comment choper les ip de la table qu'on a ajouter etc..
 
 

Reply

Marsh Posté le 07-09-2005 à 01:13:48    

Citation :

yop
le pour la creation de table, ok
 
par contre le reste je n'ai pas trop compris :(
 
comment ne pas faire appel a la base de donnée ? étant donné que l'ip a vérifiée est stockée dedans.


Tu fais la vérification avec la bdd à la connexion, après l'IP est stoquée dans la session.
 

Citation :

ensuite , pour ton sccript de verif, comment faire pour l'ip check, puisque celle ci n'est pas 81.56.*.* , mais une ip piochée dans la table que tu as crée au dessus ? pourrais tu donner un exemple avec user id 1 par exemple, comment choper les ip de la table qu'on a ajouter etc..

Tu adaptes mon script (à partir de la ligne 4), au lieu de mettre '81.56.0.60', tu mets l'IP que tu as pioché dans la bdd. S'il y en a plusieurs, tu fais le test jusqu'à ce que l'IP soit bonne ou qu'il n'y est plus d'IP à tester.
En très gros tu fais ce genre de fonction :

Code :
  1. function check_user_ip(){
  2. $sql = 'SELECT customers_address_ip
  3. FROM customers_ipcheck WHERE customers_id = 1';
  4. $query = mysql_query($sql);
  5. while($array = mysql_fetch_assoc($query)){
  6.  $ips = explode('.', $array['customers_address_ip']);
  7.  if(preg_match('/'.$ips[0].'.'.$ips[1].'.[0-9]{1,3}.[0-9]{1,3}/', $_SERVER['REMOTE_ADDR'])){
  8.   return true;
  9.  }
  10. }
  11. return false;
  12. }


Tu peux même faire des regex directement en SQL, mais là j'ai jamais essayé.
 
Essaye déjà de faire un petit truc avec ça.


Message édité par kalex le 07-09-2005 à 01:15:20
Reply

Marsh Posté le 07-09-2005 à 01:50:58    

merci
mais mon niveau a du mal a suivre
je vais essayer tout de meme ;)
jespere que dwogsi a compris qqchose et qu'il pourra maider aussi un peu ;)
 
merci bcp kalex
je v essayer davancer avec ca;)
 
ps: je c tjr pas ce qu'est un regex
mais je vais me renseigner :p


Message édité par AliaS le 07-09-2005 à 01:51:13
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed