FAQ
Hola a todos.

Quisiera plantearos una cuestión, para ver que es lo que soléis hacer en
estos casos o debatir sobre el tema.

Se trata de la "posible" inseguridad que puede ocurrir si se pasan
valores por la url tras ejecutar un formulario con el método GET. Es
decir, si se diseña un formulario con este método, los datos son pasados
del modo: dominio.com/archivo.php?var1=valor1&var2=valor2 ...

Personalmente procuro procesar los datos con el método POST, para evitar
ser mostrados por la url, pero hay casos en los que no es posible.

Para estos últimos casos, es para los que quiero encontrar alguna
solución para evitar que el usuario pueda cambiarlos y que sean procesados.

Voy a poner un ejemplo.

Tengo la siguiene tabla (en la base de datos) de clientes:

SELECT * from clientes;
id | nombre | cif
- ----+-----------------------+-----------
6 | EMPRESA 1, S.L. | B98877665
5 | EMPRESA 2, S.L. | B96940598
7 | EMPRESA 3, S.L. | B12000003
8 | EMPRESA 4, S.L. | B12001001
(4 rows)

Para mostrar (con php) los datos de la EMPRESA 1, S.L., se llama a esta
del modo: dominio.com/clientes.php?id=6, y así para cada una de ellas.

De este modo el usuario sólo tiene que cambiar el valor del campo id, en
la url, y puede ver los datos de los otros clientes.

Había pensado, para solucionarlo, crear una segunda variable que tenga
como valor unos datos temporales codificados con md5, y antes de mostrar
los datos de los clientes, se haga una comparativa y en caso afirmativo
mostrara estos.

Si os habéis encontrado alguna vez con esta cuestión, os agradecería los
comentarios.

- --
Saludos cordiales.
Pablo.

Search Discussions

  • Carlos Medina at Sep 30, 2008 at 2:33 pm

    Pablo Braulio schrieb:
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hola a todos.

    Quisiera plantearos una cuestión, para ver que es lo que soléis hacer en
    estos casos o debatir sobre el tema.

    Se trata de la "posible" inseguridad que puede ocurrir si se pasan
    valores por la url tras ejecutar un formulario con el método GET. Es
    decir, si se diseña un formulario con este método, los datos son pasados
    del modo: dominio.com/archivo.php?var1=valor1&var2=valor2 ...

    Personalmente procuro procesar los datos con el método POST, para evitar
    ser mostrados por la url, pero hay casos en los que no es posible.

    Para estos últimos casos, es para los que quiero encontrar alguna
    solución para evitar que el usuario pueda cambiarlos y que sean procesados.

    Voy a poner un ejemplo.

    Tengo la siguiene tabla (en la base de datos) de clientes:

    SELECT * from clientes;
    id | nombre | cif
    - ----+-----------------------+-----------
    6 | EMPRESA 1, S.L. | B98877665
    5 | EMPRESA 2, S.L. | B96940598
    7 | EMPRESA 3, S.L. | B12000003
    8 | EMPRESA 4, S.L. | B12001001
    (4 rows)

    Para mostrar (con php) los datos de la EMPRESA 1, S.L., se llama a esta
    del modo: dominio.com/clientes.php?id=6, y así para cada una de ellas.

    De este modo el usuario sólo tiene que cambiar el valor del campo id, en
    la url, y puede ver los datos de los otros clientes.

    Había pensado, para solucionarlo, crear una segunda variable que tenga
    como valor unos datos temporales codificados con md5, y antes de mostrar
    los datos de los clientes, se haga una comparativa y en caso afirmativo
    mostrara estos.

    Si os habéis encontrado alguna vez con esta cuestión, os agradecería los
    comentarios.

    - --
    Saludos cordiales.
    Pablo.
    Hola Pablo,
    pan de cada dia. Es decir lo primero que hago ahora despues de 10 anos
    de programar en PHP es montarme un Framework que tenga incorporada una
    rutina que me solucione el problema. Para el ejemplo que estas dando
    suelo pasar las variables como dices con una variable temporal. Yo no se
    que aplicacion estas haciendo pero veo que lo importante es que los
    usuarios no manipulen el url. En este caso tienes la posibilidad de usar
    una session o una "galleta". En el primer caso tengo una session no
    permanente que me saca los features que deseo.Es decir le paso a la
    clase que hace el management de la session via GET una id que no esta
    directamente asociada a una empresa.
    En todo caso es mejor resolver el problema por via arquitectonica que
    por workarounds.

    Saludos

    Carlos
  • Pablo Braulio at Sep 30, 2008 at 2:47 pm

    Hola Pablo,
    pan de cada dia. Es decir lo primero que hago ahora despues de 10 anos
    de programar en PHP es montarme un Framework que tenga incorporada una
    rutina que me solucione el problema. Para el ejemplo que estas dando
    suelo pasar las variables como dices con una variable temporal. Yo no se
    que aplicacion estas haciendo pero veo que lo importante es que los
    usuarios no manipulen el url. En este caso tienes la posibilidad de usar
    una session o una "galleta". En el primer caso tengo una session no
    permanente que me saca los features que deseo.Es decir le paso a la
    clase que hace el management de la session via GET una id que no esta
    directamente asociada a una empresa.
    En todo caso es mejor resolver el problema por via arquitectonica que
    por workarounds.
    Saludos
    Carlos

    Hola Carlos.

    Gracias por la contestación, y si os mucha indiscreción, ¿que framework
    usas?.

    Nunca he usado un framework, así que en eso voy un poco perdido.:-(

    - --
    Saludos cordiales.
    Pablo.
  • Martin Scotta at Sep 30, 2008 at 3:28 pm
    yo normalmente cuando tengo q pasar datos y no quiero q nadie me meta
    mano sin querer (el metodo es facilmente hackeable para alguien con 2
    dedos de frente) hago asi


    <?php
    $var = base54_encode( serialize( array('id', 'name', 'text') ) );
    $location = 'http://www.example.org/?q='.$var
    ?>

    luego para acceder a los datos simplemente

    <?php
    list($id, $name, $text) = unserialize( base64_decode( $_GET['q'] ));
    ?>

    Tiene la limitacion de la longitud de la url, pero si son cuidadosos
    con que parametros pasar por este metodo funciona y muy bien.

    Mrtn
    On Tue, Sep 30, 2008 at 11:47 AM, Pablo Braulio wrote:
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hola Pablo,
    pan de cada dia. Es decir lo primero que hago ahora despues de 10 anos
    de programar en PHP es montarme un Framework que tenga incorporada una
    rutina que me solucione el problema. Para el ejemplo que estas dando
    suelo pasar las variables como dices con una variable temporal. Yo no se
    que aplicacion estas haciendo pero veo que lo importante es que los
    usuarios no manipulen el url. En este caso tienes la posibilidad de usar
    una session o una "galleta". En el primer caso tengo una session no
    permanente que me saca los features que deseo.Es decir le paso a la
    clase que hace el management de la session via GET una id que no esta
    directamente asociada a una empresa.
    En todo caso es mejor resolver el problema por via arquitectonica que
    por workarounds.
    Saludos
    Carlos

    Hola Carlos.

    Gracias por la contestación, y si os mucha indiscreción, ¿que framework
    usas?.

    Nunca he usado un framework, así que en eso voy un poco perdido.:-(

    - --
    Saludos cordiales.
    Pablo.


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta
    http://www.echess.com.ar/

    Decile NO al soft-pirata, usa Linux!
  • Gerardo Benitez at Sep 30, 2008 at 6:55 pm
    Genial Martin, solo que ahora ya lo sabe todo el mundo.


    On Tue, Sep 30, 2008 at 12:28 PM, Martin Scotta wrote:

    yo normalmente cuando tengo q pasar datos y no quiero q nadie me meta
    mano sin querer (el metodo es facilmente hackeable para alguien con 2
    dedos de frente) hago asi


    <?php
    $var = base54_encode( serialize( array('id', 'name', 'text') ) );
    $location = 'http://www.example.org/?q='.$var
    ? <http://www.example.org/?q=%27.$var?>>

    luego para acceder a los datos simplemente

    <?php
    list($id, $name, $text) = unserialize( base64_decode( $_GET['q'] ));
    ?>

    Tiene la limitacion de la longitud de la url, pero si son cuidadosos
    con que parametros pasar por este metodo funciona y muy bien.

    Mrtn
    On Tue, Sep 30, 2008 at 11:47 AM, Pablo Braulio wrote:
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hola Pablo,
    pan de cada dia. Es decir lo primero que hago ahora despues de 10 anos
    de programar en PHP es montarme un Framework que tenga incorporada una
    rutina que me solucione el problema. Para el ejemplo que estas dando
    suelo pasar las variables como dices con una variable temporal. Yo no se
    que aplicacion estas haciendo pero veo que lo importante es que los
    usuarios no manipulen el url. En este caso tienes la posibilidad de usar
    una session o una "galleta". En el primer caso tengo una session no
    permanente que me saca los features que deseo.Es decir le paso a la
    clase que hace el management de la session via GET una id que no esta
    directamente asociada a una empresa.
    En todo caso es mejor resolver el problema por via arquitectonica que
    por workarounds.
    Saludos
    Carlos

    Hola Carlos.

    Gracias por la contestación, y si os mucha indiscreción, ¿que framework
    usas?.

    Nunca he usado un framework, así que en eso voy un poco perdido.:-(

    - --
    Saludos cordiales.
    Pablo.


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta
    http://www.echess.com.ar/

    Decile NO al soft-pirata, usa Linux!

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Gerardo Benitez
  • Martin Scotta at Sep 30, 2008 at 7:06 pm
    jajajaa

    no, por que se pueden hacer muchas variantes al mismo metodo... ahi
    esta la dificultad...

    se puede... gzipear, serializar, encodear, strrev, urlencode, json...
    mucho mas... hasta nivel bit se puede tratar...

    obvio... el ejemplo que pase fue el mas simple de todos ;)

    On Tue, Sep 30, 2008 at 3:55 PM, Gerardo Benitez
    wrote:
    Genial Martin, solo que ahora ya lo sabe todo el mundo.


    On Tue, Sep 30, 2008 at 12:28 PM, Martin Scotta wrote:

    yo normalmente cuando tengo q pasar datos y no quiero q nadie me meta
    mano sin querer (el metodo es facilmente hackeable para alguien con 2
    dedos de frente) hago asi


    <?php
    $var = base54_encode( serialize( array('id', 'name', 'text') ) );
    $location = 'http://www.example.org/?q='.$var
    ?>

    luego para acceder a los datos simplemente

    <?php
    list($id, $name, $text) = unserialize( base64_decode( $_GET['q'] ));
    ?>

    Tiene la limitacion de la longitud de la url, pero si son cuidadosos
    con que parametros pasar por este metodo funciona y muy bien.

    Mrtn
    On Tue, Sep 30, 2008 at 11:47 AM, Pablo Braulio wrote:
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hola Pablo,
    pan de cada dia. Es decir lo primero que hago ahora despues de 10 anos
    de programar en PHP es montarme un Framework que tenga incorporada una
    rutina que me solucione el problema. Para el ejemplo que estas dando
    suelo pasar las variables como dices con una variable temporal. Yo no
    se
    que aplicacion estas haciendo pero veo que lo importante es que los
    usuarios no manipulen el url. En este caso tienes la posibilidad de
    usar
    una session o una "galleta". En el primer caso tengo una session no
    permanente que me saca los features que deseo.Es decir le paso a la
    clase que hace el management de la session via GET una id que no esta
    directamente asociada a una empresa.
    En todo caso es mejor resolver el problema por via arquitectonica que
    por workarounds.
    Saludos
    Carlos

    Hola Carlos.

    Gracias por la contestación, y si os mucha indiscreción, ¿que framework
    usas?.

    Nunca he usado un framework, así que en eso voy un poco perdido.:-(

    - --
    Saludos cordiales.
    Pablo.


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta
    http://www.echess.com.ar/

    Decile NO al soft-pirata, usa Linux!

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Gerardo Benitez


    --
    Martin Scotta
    http://www.echess.com.ar/

    Decile NO al soft-pirata, usa Linux!

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedSep 30, '08 at 2:22p
activeSep 30, '08 at 7:06p
posts6
users4
websitephp.net

People

Translate

site design / logo © 2022 Grokbase