Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Utilisation de PHP dans le portail captif

    Scheduled Pinned Locked Moved Français
    4 Posts 3 Posters 2.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bennijamm
      last edited by

      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  :-[

      1 Reply Last reply Reply Quote 0
      • J
        jdh
        last edited by

        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 !

        Albert EINSTEIN : Si vous ne pouvez pas l'exprimer simplement, c'est que vous ne le comprenez pas assez bien. (If you can’t explain it simply, you don’t understand it well enough.)

        1 Reply Last reply Reply Quote 0
        • B
          bennijamm
          last edited by

          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).

          1 Reply Last reply Reply Quote 0
          • B
            baalserv
            last edited by

            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)

            Si la connerie humaine fournissait de l'énergie, la Terre serait sauvée …

            1 Reply Last reply Reply Quote 0
            • First post
              Last post
            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.