es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Políticas explícitas de RLS de PostgreSQL.

¿Son equivalente desde un punto de vista de seguridad las siguientes implementaciones de políticas?

Implícitas:

CREATE POLICY test_access_policy ON test
TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT)))
WITH CHECK (TRUE);

Explícitas:

CREATE POLICY test_insert_policy ON test
FOR INSERT TO PUBLIC
WITH CHECK (TRUE);

CREATE POLICY test_select_policy ON test
FOR SELECT TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT)));

CREATE POLICY test_update_policy ON test
FOR UPDATE TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT)));

CREATE POLICY test_delete_policy ON test
FOR DELETE TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT)));

Mi preocupación es la política de ACTUALIZACIÓN, como se indica en los documentos:

Cualquier fila cuyos valores actualizados no pasen la expresión WITH CHECK
causará un error y todo el comando será abortado. Si solo se especifica una
cláusula USING, entonces esa cláusula se usará tanto para la cláusula USING como para
los casos de WITH CHECK.

Según mi comprensión, la política de ACTUALIZACIÓN equivalente para la versión implícita (en una línea) es la siguiente:

CREATE POLICY test_update_policy ON test
FOR UPDATE TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT))) WITH CHECK (TRUE);

mientras que la versión explícita es:

CREATE POLICY test_update_policy ON test
FOR UPDATE TO PUBLIC
USING (id = (current_setting(‘rls.id’::TEXT))) WITH CHECK (id =
(current_setting(‘rls.id’::TEXT)));

Después de probar ambos casos, no encontré ninguna vulnerabilidad ¿Me estoy perdiendo algo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    No, las dos implementaciones de políticas son equivalentes desde un punto de vista de seguridad. Después de probar ambos casos, parece que no hay ningún puente de seguridad que se esté perdiendo.

Comments are closed.