Projet

Général

Profil

Fonctionnalité #16971

ANALYSE - Fonction sql non injectable dans la clause where des champs custom.

Ajouté par Ludovic ARAUJO il y a presque 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Clôturé
Priorité:
1-Majeur
Assigné à:
Version cible:
Début:
03/05/2021
Echéance:
Version applicable MC:
Tags Courrier:

Description

clause de référence :
select * from entities where entity_id = (select entity_by_res_id(100))

test effectué :

ou

pastedImage.png (136 ko) pastedImage.png Ludovic ARAUJO, 03/05/2021 18:23
pastedImage (7).png (79,8 ko) pastedImage (7).png Ludovic ARAUJO, 03/05/2021 18:24
8039
8040

Historique

#1 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

  • Priorité changé de 2-Sérieux à 0-Bloquant

#2 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

résultat en CMD :

psql -U maarch -d 2010 -c "select * from entities where entity_id =  (select entity_by_res_id(100))"
id | entity_id |       entity_label        |        short_label        | entity_full_name | enabled | adrs_1 | adrs_2 | adrs_3 | zipcode | city | country |       email       |     business_id      | parent_entity_id | entity_type | ldap_id | producer_service | folder_import | external_id 
----+-----------+---------------------------+---------------------------+------------------+---------+--------+--------+--------+---------+------+---------+-------------------+----------------------+------------------+-------------+---------+------------------+---------------+-------------
  1 | VILLE     | Ville de Maarch-les-bains | Ville de Maarch-les-bains |                  | Y       |        |        |        |         |      |         | support@maarch.fr | 45239273100025/VILLE |                  | Direction   |         |                  |               | {}

#3 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

fonction sql :

create or replace function entity_by_res_id(id int) returns varchar AS $BODY$
declare
    entity varchar;
    res varchar;
begin
    select initiator into entity from res_view_letterbox where res_id = id;
    select entity_tree(entity) into res;
    return res;
END;
$BODY$ LANGUAGE plpgsql;


create or replace function entity_tree(entity varchar) returns varchar AS $BODY$
declare
    parentid varchar;
    res varchar;
begin
    select parent_entity_id into parentid from entities where entity_id = $1;
    if parentid is null or parentid = '' then
        return $1;
    else
        select entity_tree(parentid) into res;
        return res;
    end if;   
END;
$BODY$ LANGUAGE plpgsql;

#5 Mis à jour par Support Maarch il y a presque 3 ans

  • Statut changé de A qualifier à A traiter

#6 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

  • Version cible changé de Inscription Backlog Courrier à Courrier 20.10 TMA

#7 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Tracker changé de Anomalie à Fonctionnalité
  • Sujet changé de Fonction sql non injectable dans la clause where des champs custom. à ANALYSE - Fonction sql non injectable dans la clause where des champs custom.
  • Statut changé de A traiter à Complément d'Informations
  • Assigné à changé de EDI PO à Ludovic ARAUJO

A tester avec une vue

-> vue avec 2 colonnes

Select non autorisé (pas de sous-requêtes dans les clauses)

#8 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

code bloquant CustomFieldController.php ligne 356-358:

         if (stripos($body['values']['clause'], 'select') !== false) {
             return ['errors' => 'Clause is not valid', 'lang' => 'invalidClause'];
         }

#9 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

ok je test avec la vue.

#10 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

avec la vue pas de soucis.

create or replace view vue
AS select r.res_id, 
 r.typist,
 e.entity_label as root_entity
from res_letterbox r
left join entities e on entity_id = entity_by_res_id(r.res_id::int)

#11 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

a cloturer

#12 Mis à jour par Ludovic ARAUJO il y a presque 3 ans

  • Assigné à changé de Ludovic ARAUJO à EDI PO

#13 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Priorité changé de 0-Bloquant à 1-Majeur

#14 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Statut changé de Complément d'Informations à Clôturé

#15 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Projet changé de Backlog à Backlog Courrier
  • Version cible changé de Courrier 20.10 TMA à 287

#16 Mis à jour par Emmanuel DILLARD il y a presque 3 ans

  • Version cible changé de 287 à 292

#17 Mis à jour par Emmanuel DILLARD il y a plus de 2 ans

  • Version cible changé de 292 à 20.10 TMA3

Formats disponibles : Atom PDF