Fonctionnalité #16971
ANALYSE - Fonction sql non injectable dans la clause where des champs custom.
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
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