Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-10-2008 01:28:17

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Problème de sécurité

J'ai un problème d'ordre général qui m'inquiète vraiment, peut-être que certains de part leurs expériences sauront m'aider.

J'ai un problème de sécurité mais que dans certaines conditions.

Je viens de passer un nouveau site en prod. Il comporte deux applications qui partagent les mêmes ressources (images, css, js, etc.).
Une appli est utilisée pour le site, l'autre pour un espace-clients. Je n'ai pour l'instant pas la possibilité de faire du SSL sur mon serveur.

Je me connecte à un serveur MS SQL Server distant pour effectuer l'authentification. Ne réussissant pas à utiliser correctement Zend avec mssql, j'ai installé MDB2 (librairie PEAR), et j'ai dérivé la classe Zend_Auth_Adapter_DbTable pour l'interfacer avec ma connexion MDB2.

Lorsque j'utilise cette connexion, je constate dans la barre d'état du navigateur qu'au chargement de ma page il fait appel à des urls ou des IP externes indésirables, ce qui me contrarie fortement smile (en plus je suis sur que ces urls exécutent des scripts, puisque parfois sur la page j'ai des erreurs de scripts et parfois non)

Par exemple:
http://forum.les-ames-usees.com/divers/z-f-1961.jpg

Et les urls appelées changent....

Ca ne vient pas de mon réseau local puisque c'est la même histoire depuis n'importe quel accès.

Par contre, si je me connecte à une base en localhost je n'ai pas ce problème.

Je suis très embêté par ça, je ne me sens pas fier de voir ses urls (qui changent en plus) se charger malgré moi.

Des idées pour m'aider ?

Merci,

A+ benjamin.

Dernière modification par Delprog (14-10-2008 01:37:10)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#2 14-10-2008 08:46:36

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: Problème de sécurité

sur ce coup là difficile de t'aider "à froid"... d'autant que je ne connais pas MDB2, et encore moins MSSQL wink

as-tu essayé de consulter ton site avec un Firefox équipé de Firebug pour tracer toutes les émissions de requêtes (y compris Ajax) ?

si tu n'as pas/ne connais pas ces outils, indique-moi l'URL j'irai faire quelques tests.


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#3 14-10-2008 09:10:30

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Problème de sécurité

Et bien MDB2 n'est rien de plus qu'un adaptateur fourni avec des drivers de BDD.

Je ne pense vraiment pas que la faille vienne de là, puisqu'en utilisant MDB2 sur une base MySQL en localhost je n'ai pas de problème...donc je suppose que c'est plus ou moins lié à la connexion distante, pas forcément à MSSQL, après je suis incapable de déterminer la cause exacte smile

Est-ce qu'on ne peut pas interdire tout simplement l'accès à des urls hors du domaine avec apache ou autre ?

Je suis bon pour pousser des lignes de codes, mais je ne suis pas très habitué à gérer un serveur, la config apache/php et autre. Donc niveau sécurité, autant dire que j'ai aucune expérience. Mis à part la partie concernant le code (formulaires, etc.)

Pour info,

Mon virtualhost :

Code:

<VirtualHost *:80>
ServerName www.xxxxx.com
ServerAdmin xxxxx@xxxxx.com
DocumentRoot "D:/website/www/xxxxx/public"
ErrorLog "D:/website/logs/www.xxxxx.com-error_log"
TransferLog "D:/website/logs/www.xxxxx.com-access_log"
<Location />
  RewriteEngine on
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</Location>
<Directory "D:/website/www/xxxxx/public">
#Options Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory> 
</VirtualHost>

Mon code de connexion/authentification :

Code:

function init()
    {        
        //$this->initView();
        $this->view->baseUrl = $this->_request->getBaseUrl();                        
        
        if (!Zend_Registry::isRegistered('dbAdapter')) {            
            
            // Connexion à la Base de données pour l'authentification            
            $config = Zend_Registry::get('config');            
            Zend_Loader::loadClass('MDB2');
            
            $dsn_mdb2 =$config->general->databaseauth->adapter . '://'.$config->general->databaseauth->params->username;
            $dsn_mdb2.=':'.$config->general->databaseauth->params->password;
            $dsn_mdb2.='@'.$config->general->databaseauth->params->host;
            $dsn_mdb2.='/'.$config->general->databaseauth->params->dbname;
            
            $options_mdb2 = array(
                'debug'       => 2,
                'portability' => MDB2_PORTABILITY_ALL,
            );
                                    
            $db =& MDB2::connect($dsn_mdb2,$options_mdb2);
            $db->setFetchMode(MDB2_FETCHMODE_ASSOC);
            if (MDB2::isError($db)) {
                die($db->getMessage());}
            //$db->disconnect();    
                        
            Zend_Registry::set('dbAdapter', $db);
            
        }
    }

Code:

function loginAction()
    {
        $this->_helper->layout->setLayout('empty');
        //$this->_helper->viewRenderer->setNoRender();
        
        if ($this->_request->isPost()) {
            // Récupère les informations saisies par l'utilisateur (envoyées en POST)
            Zend_Loader::loadClass('Zend_Filter_StripTags');
            $f = new Zend_Filter_StripTags();
            $username = $f->filter($this->_request->getPost('fmID'));
            $password = $f->filter($this->_request->getPost('fmPasswd'));
            
            if ((empty($username))||(empty($password))) {
                $_message = 'Echec de l\'authentification,';
                $_message.= '<br />Veuillez compl&eacute;ter vos identifiants...';                
                echo $_message;
               exit;
            } 
            else {                                                
                // Configure Zend_Auth pour accéder à une table de la BDD
                Zend_Loader::loadClass('Zend_Auth_Adapter_Mdb2');
                $dbAdapter = Zend_Registry::get('dbAdapter');
                $authAdapter = new Zend_Auth_Adapter_Mdb2($dbAdapter);
                            
                $authAdapter->setTableName('Clients')
                                        ->setIdentityColumn('RefCabinet')
                                        ->setCredentialColumn('MpFtp');
                
                // Définit les valeurs avec lesquels authentifier l'utilisateur (ici venant d'un formulaire)
                $authAdapter->setIdentity($username);
                $authAdapter->setCredential($password);
        
                // Execute l'authentification
                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($authAdapter);
        
                if ($result->isValid()) {
                    // succes: stocke la ligne de la BDD pour pouvoir y accéder plus tard
                    // On ne stocke pas le mot de passe !!
                    $data = $authAdapter->getResultRowObject(null, 'MpFtp'); 
                    $auth->getStorage()->write($data);
                    if ($this->_request->isXmlHttpRequest()) {                        
                        echo 'OK';
                        exit;
                    }
                    else {
                        $this->_redirect('/');
                        exit;
                    }
                } 
                else {
                    // echec de l'authentification
                    $_message = 'Echec de l\'authentification,';                    
                    foreach ($result->getMessages() as $message) {
                $_message.='<br>'.utf8_encode($message);
                   }                   
                   echo $_message;
                   exit;
                }        
            }
        }
        else {
            $this->_redirect(Zend_Registry::get('config')->general->private . '/auth/signin');            
        }
    }

Sur le reste du site, donc sur le même domaine, je n'ai aucun problème, c'est vraiment lorsqu'on se logge et qu'on accède à l'espace-clients.

Malheureusement je ne peux pas te donner d'accès pour tester, je vais m'occuper de sortir la trace Firebug.

Merci,

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#4 14-10-2008 09:42:09

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Problème de sécurité

Donc voilà les logs firebug:

http://forum.les-ames-usees.com/divers/z-f-thread1961/log-firebug.jpg

Donc il y a deux requêtes indésirables hors du domaine

Le détail de la première:
http://forum.les-ames-usees.com/divers/z-f-thread1961/log-empty1-headers.jpg

http://forum.les-ames-usees.com/divers/z-f-thread1961/log-empty1-response.jpg

http://forum.les-ames-usees.com/divers/z-f-thread1961/log-empty1-cache.jpg

Et de la deuxième :
http://forum.les-ames-usees.com/divers/z-f-thread1961/log-count17-params.jpg

http://forum.les-ames-usees.com/divers/z-f-thread1961/log-count17-headers.jpg

http://forum.les-ames-usees.com/divers/z-f-thread1961/log-count17-response.jpg


J'ai le coeur qui s'accélère en voyant des scripts JS s'éxécuter comme ça :p

Je pensais que ça avait un rapport avec l'utilisation des sessions, mais étant donné qu'avec une base de données locale je n'ai pas de problème, je me demande...

A+ benjamin.

Dernière modification par Delprog (14-10-2008 09:48:30)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 14-10-2008 10:23:34

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Problème de sécurité

Bonjour,

ça ne viendrait pas de ta machine ? ça sent plus l'activeX ou le plugin FF installé dans ton dos par un site ou un mail vérolé, plutôt qu'un truc lié à ton code...

Tu peux essayer le même site avec une autre machine (un mac, un linux, ou ton windows mais avec un autre navigateur) ?

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 14-10-2008 10:26:38

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Problème de sécurité

En tout cas sur ta prod en essayant un login/pass bidon, je n'ai aucune requête vers l'extérieur depuis ton site. Tout vient de ton domaine.
(j'utilise FF sur mac)

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 14-10-2008 10:28:10

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Problème de sécurité

Salut philippe,

J'ai pensé immédiatement à ça, mais raté smile

C'est le même resultat depuis n'importe quelle machine et avec n'importe quel navigateur.

J'ai même eu une fois une ip qui était chargée et qui faisait planter IE7.

Chrome détectait lui l'accès à cette ip et bloquait la page en demandant confirmation de l'utilisateur avant de continuer.

En tout cas sur ta prod en essayant un login/pass bidon, je n'ai aucune requête vers l'extérieur depuis ton site. Tout vient de ton domaine.

Oui ça ne se produit qu'au chargement de la page d'accueil de l'espace-clients, une fois loggé.

Dernière modification par Delprog (14-10-2008 10:29:16)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#8 14-10-2008 10:47:22

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Problème de sécurité

Hum... tjrs dans la série des tests bêtes et méchants : t'as essayé de chercher la chaîne "51yes" dans tout ton code (y compris les librairies pear ou autre) ?

Ca ne fait ça que sur le serveur de prod ou tu as la même chose en valid et en dev ?

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 14-10-2008 12:19:04

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Problème de sécurité

En Dev, la machine ne sort pas du réseau local donc je ne peux pas savoir.

En validation sur le serveur (qui est le même) j'ai le même problème.

Chaque fois que j'ai vu l'accès à une URL ou une IP, j'ai recherché dans tous les fichiers du site mais biensur aucun résultat.

Donc ce ne sont pas les librairies qui me font défaut. Surtout que je n'utilise que Zend et MDB2, rien d'autre.

Je re-précise encore une fois parce que ça me parait être un paramètre important. Lorsque j'effectue la connexion et l'authentification sur une BDD locale au serveur web je n'ai aucun problème.

Comme si le fait de me connecter à une BDD distante et donc une ip externe ouvrait une porte pour autre chose...

A+ benjamin.

Dernière modification par Delprog (14-10-2008 12:19:42)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#10 14-10-2008 12:30:44

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: Problème de sécurité

Essaies d'identifier à partir de quel moment ton application fait appel à ces adresses extérieures (quelle est la fonction qui lance tout ça). Cela, exclusivement si ce problème vient bien du code de tes librairies.

Car ton serveur distant pourait aussi te rediriger vers d'autres URL.

Dernière modification par acharrex (14-10-2008 12:31:18)

Hors ligne

 

#11 14-10-2008 13:53:55

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: Problème de sécurité

pour savoir si c'est ton navigateur qui ajoute ces requêtes à la volée, test un truc comme ça :

Code:

ob_start();
$frontController->dispatch();
if(preg_match('/empty1\.cn/i',$content)) echo "Trace de empy1 trouvée...<br><br>";
$content = ob_get_clean();
echo htmlspecialchars($content);

Comme ça tu sauras si ces appels proviennent effectivement du code généré par ton appli ou bien si il s'agit d'un spyware/virus/que sais-je...

Si ça vient bien de ton code, il faudra débugger pas-à-pas en surveillant la sortie pour déterminer à quel moment ces appels sont injectés dans ton appli.


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages