Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 (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:
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)
Hors ligne
sur ce coup là difficile de t'aider "à froid"... d'autant que je ne connais pas MDB2, et encore moins MSSQL
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.
Hors ligne
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
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 :
<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 :
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); } }
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é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.
Hors ligne
Donc voilà les logs firebug:
Donc il y a deux requêtes indésirables hors du domaine
Le détail de la première:
Et de la deuxième :
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)
Hors ligne
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
Hors ligne
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
Hors ligne
Salut philippe,
J'ai pensé immédiatement à ça, mais raté
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)
Hors ligne
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
Hors ligne
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)
Hors ligne
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
pour savoir si c'est ton navigateur qui ajoute ces requêtes à la volée, test un truc comme ça :
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.
Hors ligne