Utilisation de PHP dans le portail captif
-
Bonjour,
J'utilise pfSense, entre autres, pour son portail captif. Les utilisateurs sont authentifiés via freeRadius qui est installé sur le même serveur et une base MySQL qui se trouve sur un autre serveur.
Dans le fonctionnement que l'on souhaitait mettre en place, nous voulions que les clients qui se connectent au portail captif puissent s'inscrire en remplissant un formulaire sur le portail et que les éléments saisis soient insérer dans la base MySQL en attente de validation par un responsable.J'ai donc créé une page php que j'ai mise en tant que "Portal page contents". Le code est simple :
$link = mysql_connect('10.0.1.208:3306', 'user', 'pwd'); if (!$link) { die('Connexion impossible : ' . mysql_error()); } echo 'Connecté correctement'; mysql_close($link); ?>
J'ai testé cette page sur un serveur WAMP, elle fonctionne.
Lorsqu'elle se charge sur pfSense, voilà l'erreur que je rencontre :Fatal error: Call to undefined function mysql_connect() in /var/etc/captiveportal_wifi_clients.html on line 3
Après quelques recherches sur Internet (https://doc.pfsense.org/index.php/How_do_I_get_PHP_support_for_mysql,_sqlite,_sockets,_etc, https://forum.pfsense.org/index.php?topic=58772.0), j'ai suivi les instructions données, à savoir :
Je liste les modules php disponibles :
php -m
J'obtiens
apc bcmath cgi-fcgi Core ctype curl date dom ereg gettext hash json ldap libxml mbstring mcrypt mhash mysqlnd openssl pcntl pcre PDO pfSense posix radius readline Reflection session shmop SimpleXML SPL SQLite ssh2 standard suhosin xml xmlreader xmlwriter zlib zmq
Je crée un fichier mysqlnd
touch /etc/php_dynamodules/mysqlnd
Je réécris le fichier php.ini
/etc/rc.php_ini_setup
Je relance la même commande
php -m | grep mysql
Et j'obtiens :
mysql
Il était demandé de de redémarrer éventuellement, même si ce n'était pas forcément nécessaire, ce que j'ai fait. Sans mieux…
Voici mon fichier php.ini :; File generated from /etc/rc.php_ini_setup output_buffering = "0" expose_php = Off implicit_flush = true magic_quotes_gpc = Off max_execution_time = 900 max_input_time = 1800 register_argc_argv = On file_uploads = On upload_tmp_dir = /tmp upload_max_filesize = 200M post_max_size = 200M html_errors = Off zlib.output_compression = Off zlib.output_compression_level = 1 include_path = ".:/etc/inc:/usr/local/www:/usr/local/captiveportal:/usr/local/pkg" display_startup_errors=on display_errors=on log_errors=on error_log=/tmp/PHP_errors.log extension_dir=/usr/local/lib/php/20090626/ date.timezone="Europe/Paris" ; Extensions extension=apc.so extension=xml.so extension=dom.so extension=simplexml.so extension=xmlreader.so extension=xmlwriter.so extension=curl.so extension=gettext.so extension=ldap.so extension=openssl.so extension=pcntl.so extension=hash.so extension=mcrypt.so extension=posix.so extension=readline.so extension=session.so extension=suhosin.so extension=ctype.so extension=mbstring.so extension=shmop.so extension=zlib.so extension=pdo.so extension=sqlite.so extension=radius.so extension=zmq.so extension=ssh2.so extension=pfSense.so extension=json.so extension=bcmath.so ; APC Settings apc.enabled="1" apc.enable_cli="0" apc.shm_size="50M" [suhosin] suhosin.get.max_array_depth = 5000 suhosin.get.max_array_index_length = 256 suhosin.get.max_vars = 5000 suhosin.get.max_value_length = 500000 suhosin.post.max_array_depth = 5000 suhosin.post.max_array_index_length = 256 suhosin.post.max_vars = 5000 suhosin.post.max_value_length = 500000 suhosin.request.max_array_depth = 5000 suhosin.request.max_array_index_length = 256 suhosin.request.max_vars = 5000 suhosin.request.max_value_length = 500000 suhosin.memory_limit = 512435456
Je suis en version 2.1-RELEASE de pfSense.
Sauf erreur de ma part, il n'y a aucune trace de mysql ni mysqlnd…
Qu'est ce que je ne fais pas bien ?Espérant avoir été assez clair sur mon problème :-[
-
Il n'est pas très étonnant, si on y réfléchie pendant 2 vraies minutes, qu'il n'y ait pas dans un firewall des bibliothèques du type 'accès d'un DB mysql pour php'.
(Cette vraie réflexion devrait aussi aboutir à plutôt bannir les packages de pfSense parce qu'ils n'ont aucune garantie et ajoute, forcément, des risques pour la sécurité !)Maintenant, au lieu de réfléchir comme cela, vous auriez pu penser à insérer un lien vers un serveur web qui sera situé sur le serveur mysql et qui fera la même chose.
Cela s'appelle ajouter EN TOUTE SECURITE une astuce à un firewall dont l'objet est LA SECURITE.NB : je suis contre le type d'ajout indiqué dans le lien https://doc.pfsense.org/index.php/How_do_I_get_PHP_support_for_mysql,_sqlite,_sockets,_etc !
Il est noté expérimental et … sans indication de la version de pfSense !
NB : lire les réponses de 'jimp' dans le 2ième lien qui paraissent la sagesse ! -
Merci pour votre réponse mais un lien vers une autre adresse IP ne semble pas possible. J'avais bien évidemment tenté cette solution mais tout lien me renvoie irrémédiablement vers la page d'authentification 192.168.1.1:8000 (la page d'accueil du portail captif).
-
bonjour,
Encore un manque de recherche/reflexion car le portail captif de pf dispose d'options pour permettre l'accès à un/des serveur SANS ou AVANT l'authentification
cordialement
(Question déja traiter sur ce forum)