IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Utiliser les attributs (attr) pour envoyer le nom d'une BD > Risque de sécurité


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut Utiliser les attributs (attr) pour envoyer le nom d'une BD > Risque de sécurité
    Bonjour,
    Pour faciliter le dev. j'ai pensé à mettre dans les attributs d'un boutton le nom de la BD à updater (en ajax).
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <button type="button" class="suppr_region" value="<?php echo $value['id_region'];?>" db_name="db_regions">
    <i class="fa fa-fw fa-trash-alt"></i>
    </button>
    Et en Jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $('.suppr_region').click(function (e) {
      suppr_region_id = $(this).val();
      db_name=$(this).attr('db_name'); // On récupère le nom de la BD
      console.log(db_name);
      console.log('suppr_region_id '+suppr_region_id);
      $.get('update.php',{db_name: db_name, suppr_region_id: suppr_region_id}, function(data){
        console.log(data);
      });
    });
    Ca serait plus facile pour updater les BD.
    On pourrait aussi envoyer le nom de la colonne, ca permettrait de n'avoir qu'un fichier update.php.

    Par contre ca craint car on donne le nom de cette BD à qui voudrait s'en servir pour la 'niquer', non ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    tu peux avoir un db_id ...

    et coté serveur un array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBids = [ "db_regions",  ... ]
    Comme ça tu ne diffuse pas tes noms de tables coté client ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    A ouais, bonne idée.

    On pourrait y mettre aussi les noms de colonnes.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DBs = [ [ "db_regions", ["col1","col2" ... ]] ,  [ "db_dept", ["col1","col2" ... ]] ,  [ "db_pays", ["col1","col2" ... ]]]
     
    DBs[0][0] = db_name
     
    dBs[0][1] = array colonnes
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Alors, depuis... je me suis régalé
    et je m'y suis pris comme ça

    Création de l'array des bd
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php 
    $_SESSION['arr_db'] = array();
    $_SESSION['arr_db']['region'] = array('db_name' => 'region', 'col_id' => 'id_region','col_name' => 'libelle_region');
    $_SESSION['arr_db']['format'] = array('db_name' => 'format', 'col_id' => 'id_format','col_name' => 'libelle_format');
    print_r($_SESSION['arr_db']['format']);
    ?>
    Puis l'input et le boutton pour ajouter:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <input type="text" placeholder="Ajouter une r&eacute;gion">
    <button type="button" class="add" what="region"> <!-- what = index de l'array $_SESSION['arr_db'] -->
       <i class="fa fa-fw fa-plus"></i>
    </button>
    Un autre:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <input type="text" placeholder="Ajouter une r&eacute;gion">
    <button type="button" class="add" what="format"> <!-- what = index de l'array $_SESSION['arr_db'] -->
       <i class="fa fa-fw fa-plus"></i>
    </button>
    Puis en jquery
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $('.add').click(function (e) {
      what=$(this).attr('what'); // Le nom de l'index 
      valeur=$(this).prev().val(); // La valeur de l'input précédent
      console.log(what+' '+valeur);
    // Envoyer 
      $.get('update.php',{what: what,valeur: valeur}, function(data){
        console.log(data);
      });
    });
    Et dans update.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php session_start();
    if (!empty($_GET)) {
            include('q_try.php');
            $bd_name = $_SESSION['arr_db'][strip_tags($_GET['what'])]['db_name']; // On récupère le nom de la BD
            $col_name = $_SESSION['arr_db'][strip_tags($_GET['what'])]['col_name']; // On récupère le nom de la colonne
            $valeur = strip_tags($_GET['valeur']);
    echo 'add > '.$valeur.' '.$col_name.' '.$bd_name; 
    try { 
    $sql = "INSERT INTO $bd_name SET $col_name=?";
    $stmt = $bdd_user->prepare($sql);
    $stmt->execute(array($valeur));
    } catch(PDOException $e) {echo 'Erreur: '.$sql . "<br>" . $e->getMessage();$erreur="$_POST deconnect<br>".$sql;} 
    ?>
    Dans ce cas on ne voit dans le html que le mot 'region' ou 'format',
    c'est plus facile pour le dev. mais ca donne un indice
    (dangereux ?)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne voudrais pas "casser l'ambiance", mais... les data-* sont faits pour ça !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button type="button" class="add" data-what="format">...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var what = $(this).data('what'); // Le nom de l'index
    Par contre, je te confirme : Risque de sécurité, car c'est très facile à modifier (ne serait-ce que via la console "F12").

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Bon d'accord

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Bon, je me suis bien 'éclaté'
    Mais maintenant je galère pour rafraichir la div avec les nouvelles valeurs.
    Je recharge bien mes sessions:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // region
      unset($_SESSION['array_regions']);
      try { $sql = "SELECT * FROM $bd_name ORDER BY libelle_region ASC";
          $stmt = $bdd_user->prepare($sql);$stmt->execute(array());
          while ($results=$stmt->fetch(PDO::FETCH_ASSOC)) {
          	// echo $results['libelle_region'].' / ';
             $_SESSION['array_regions'][] = array('id_region' => $results['id_region'], 'libelle_region' => $results['libelle_region'],'id_pays' => $results['id_pays']);
          }
        } catch(PDOException $e) {echo 'Erreur: '.$sql . "<br>" . $e->getMessage();$erreur="$_POST deconnect<br>".$sql;} 
        // print_r($_SESSION['array_regions']);
    Mais je n'arrive pas à recharger la div de la page de base
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      <div class="row" id="div_region">
        <div class="d-none d-md-block col-sm-1 "> 
        </div>
        <div class="col-xs-12 col-md-3 "> 
          <?php 
          foreach ($_SESSION['array_regions'] as $key => $value) { ?>
            <input type="text" name="<?php echo $key;?>" value="<?php echo $value['libelle_region'];?>" class="form-control" style="width:70%">
     
            <button type="button" class="form-control update" value="<?php echo $value['id_region'];?>" data-what="region"><i class="fa fa-fw fa-save"></i></button>
            <button type="button" class="form-control suppr" value="<?php echo $value['id_region'];?>" data-what="region">
              <i class="fa fa-fw fa-trash-alt"></i>
            </button>
     
          <?php } ?>
        </div>
      </div>
    Avec
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function refresh() {
      $('#div_region').load('../artcl.php');
      return true;
    };
    Que j'appel après le $.get
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $.get('update_arts.php',{id: id, what: what, type: 'add',valeur: valeur}, function(data){
        console.log(data);
      });
      refresh(div_refresh);
    D'après la console il n'a pas eu le temps de faire la requete sql
    qu'il lance déjà la fonction refresh().

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    J'ai retrouvé ca dans les fonds de mes vieux folders
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
      function Rafraichir(){
              $("#div_region").load("index.php?p=artcl.php #div_region");
          } 
    </script>
    En fait l'adresse était index.php?p=artcl.php

    Mais ca ne marche qu'une seule fois...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2007] Utiliser les contacts partagés pour envoyer un mail
    Par Frank Holstein dans le forum Outlook
    Réponses: 0
    Dernier message: 28/01/2010, 14h13
  2. Est-ce que je peux utiliser les mêmes variables pour javascript et PHP?
    Par sparil dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 01/07/2007, 13h23
  3. Réponses: 5
    Dernier message: 11/01/2007, 09h50
  4. [débutante]utiliser les classes css pour surligner des liens
    Par Mitaka dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/01/2006, 09h37
  5. Peut-on utiliser les SGBDs libres pour construire un DWH ?
    Par daabos dans le forum Alimentation
    Réponses: 6
    Dernier message: 01/10/2004, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo