[Resuelto]: Alternativa a una solución de escapar comillas simples y dobles

Iniciado por Leguim, 31 Julio 2020, 00:17 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Hola,

quería saber si era no se si buena práctica porque no creo que sea muy común, pero veo que puede resultar más fácil y la verdad no veo mucha diferencia... Tampoco quiero que por hacer algo fácil el "sistema" quede horrendo...

como en el post anterior, había dicho que cuando una cadena tiene "hola ' mi nombre es..." esa comilla simple puede dar problemas, y también al reves si fuera unas comillas dobles...

¿Habrá algún problema si decido transformar todo lo que se reciba de esta manera?

Código (php) [Seleccionar]

$x = str_replace("'", "'"); // cambió ' por '
$x = str_replace('"', '"'); // cambió " por "


No veo mucha diferencia hasta en estilo puede quedar un poquito mejor (creo)

¿Qué opinan?

EDIT: Me fijé que habría un problema si el usuario registra una contraseña como por ejemplo...

micontraseña'123

entonces su contraseña sería

micontraseña'123

pero voy a prohibir las contraseñas con comillas simples y dobles y ya...

EdePC

Dependerá del destino, por ejemplo en MiriadaX (una página de cursos gratuitos) hay cursos de programación PERO han tenido la fantástica idea de mostrar código fuente ya sea en sus PDFs o en Capturas de Pantalla o en la misma página, con esas problemáticas comillas, y pues hay muchas quejas de algunos usuarios que copian y pegan este código dando error al intentar ejecutarlos XD.

Si es solo para lectura como bien ya lo hace Word o Indesign que al momento que poner las comillas sencillas las convierte las comillas tipográficas, no debería haber problemas, "porque se ven mejor" para texto.

- También considera la codificación de caracteres html destino, normalmente para evitarse estos problemas siempre se codifican los caracteres no estandar (htmlentities lo hace perfectamente). Tampoco debería de haber mayor problema porque los navegadores web modernos usan por defecto UTF-8 y deberían de poder mostrar correctamente esos caracteres.

Leguim

Cita de: EdePC en 31 Julio 2020, 00:46 AM
Dependerá del destino, por ejemplo en MiriadaX (una página de cursos gratuitos) hay cursos de programación PERO han tenido la fantástica idea de mostrar código fuente ya sea en sus PDFs o en Capturas de Pantalla o en la misma página, con esas problemáticas comillas, y pues hay muchas quejas de algunos usuarios que copian y pegan este código dando error al intentar ejecutarlos XD.

Si es solo para lectura como bien ya lo hace Word o Indesign que al momento que poner las comillas sencillas las convierte las comillas tipográficas, no debería haber problemas, "porque se ven mejor" para texto.

- También considera la codificación de caracteres html destino, normalmente para evitarse estos problemas siempre se codifican los caracteres no estandar (htmlentities lo hace perfectamente). Tampoco debería de haber mayor problema porque los navegadores web modernos usan por defecto UTF-8 y deberían de poder mostrar correctamente esos caracteres.


jaja estoz MiriadaX

Gracias!!!

AlbertoBSD

Cita de: MiguelCanellas en 31 Julio 2020, 00:17 AM
pero voy a prohibir las contraseñas con comillas simples y dobles y ya...

Por seguridad no se debe de restringir ningun tipo caracter en las contraseñas.

Ni se deben de guardar contraseñas en texto plano en las bases de datos.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Leguim

#4
Sí, igual existen millones de combinaciones posibles como contraseñas no creo que restringir las comillas simples y dobles haga alguna diferencia.

En lo de texto plano, ya limpio todo antes de ingresar aunque sea un 1 a la base de datos..

Gracias!


EDIT: Te había entendido mal, si con texto plano te referias a que no está hasheado.. si lo cifro

@XSStringManolo

#5
Por qué no le añades a mano el caracter de escape cuando defines el string?

Si vas a meter input de usuario sin sanitizar, te hackean la web. Y esto no lo evitas con html_entities ni la función de turno.

Véase tu ejemplo:
Código (javascript) [Seleccionar]
$(selector).html('<p>ves aquella esquina? \' tu madre y tu hermana ahí trabajan!</p>');

Imagínate que me dejas registrarme en tu web y vas a poner mi nombre de usuario ahí:
Código (javascript) [Seleccionar]
$(selector).html('stringmanolo');

- Si escapas con remplace las comillas hago:
user: stringmanolo\'); alert(); \'
Y queda:
Código (javascript) [Seleccionar]
$(selector).html('stringmanolo\\'); alert(); \\'');

O hago:
user: \'+alert());//
Código (javascript) [Seleccionar]
$(selector).html( '\\' + alert() ); //');

Usa htmlpurifier.
https://github.com/ezyang/htmlpurifier


De todas formas si no sabes lo que pueden hacer en las headers, en php, en js, en html, en css, en jquery y demás... Poco vas a solucionar. Acabaras metiendo input sanitizado en el js y te harán inyección.

Deberías leerte libros de seguridad web.

Leguim

#6
Probé tu código... no se si me equivoque con algo o si te olvidaste algo pero todo eso no me afecto en nada.

Código (php) [Seleccionar]

       <?php
$string_1 'stringmanolo\'); alert(); \'';
$string_2 '\'+alert());//';
//$string_x = [Función para limpiar el dato]
?>


<script type="text/javascript">
$('body').html('<?php echo($string_2); ?>');
</script>

@XSStringManolo

Uno de los payloads no es válido, ya lo arreglé.

Código (javascript) [Seleccionar]
<html>
<body>
<script>
var $body = {
  html: function(string) {
          document.body.innerHTML = string;
        }
};

$body.html('\\' + alert(1) ); //');
$body.html('stringmanolo\\'); alert(2);//'

</script>
</body>
</html>

Leguim

Cita de: @XSStringManolo en 31 Julio 2020, 03:08 AM
Uno de los payloads no es válido, ya lo arreglé.

Código (javascript) [Seleccionar]
<html>
<body>
<script>
var $body = {
 html: function(string) {
         document.body.innerHTML = string;
       }
};

$body.html('\\' + alert(1) ); //');
$body.html('stringmanolo\\'); alert(2);//'

</script>
</body>
</html>


Código (php) [Seleccionar]

Realmente no está haciendo nada, no se que pueda estar mal...

<?php
$string_1 "\\' + alert(1) ); //";
$string_2 "stringmanolo\\'); alert(2);//";
// $string = Clearn($string, 'x');
?>


<script type="text/javascript">
var $body = {
   html: function(string)
   {
        document.body.innerHTML = string;
    }
};

$body.html('<?php echo($string_1); ?>');
$body.html(<?php echo($string_2); ?>
</script>


De igual forma, cuando reemplacé las comillas simples y dobles se termino la joda, y cuando limpie toda la cadena también... hasta donde yo entiendo...

No ocurre nada anormal, y eso que pruebo el código sin limpiar nada entonces algo está fallando.

MinusFour

Cita de: MiguelCanellas en 31 Julio 2020, 01:52 AMEn lo de texto plano, ya limpio todo antes de ingresar aunque sea un 1 a la base de datos..

El punto es que no debería haber comillas en los hashes. Así que tu función no hace nada.