Projet

Général

Profil

Actions

Fonctionnalité #16971

fermé

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

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

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

Description

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

test effectué :

ou
![](pastedImage (7).png)


Fichiers

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

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

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

Mis à jour par Ludovic ARAUJO il y a plus de 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   |         |                  |               | {}

Mis à jour par Ludovic ARAUJO il y a plus de 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;

Mis à jour par Support Maarch il y a plus de 3 ans

  • Statut changé de A qualifier à A traiter

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 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)

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

code bloquant CustomFieldController.php ligne 356-358:

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

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

ok je test avec la vue.

Mis à jour par Ludovic ARAUJO il y a plus de 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)

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

a cloturer

Mis à jour par Ludovic ARAUJO il y a plus de 3 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 3 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 3 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 3 ans

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

Mis à jour par Emmanuel DILLARD il y a plus de 3 ans

  • Version cible changé de 287 à 292

Mis à jour par Emmanuel DILLARD il y a environ 3 ans

  • Version cible changé de 292 à 20.10 TMA3
Actions

Formats disponibles : Atom PDF