validar usuarios usuario usando tipos sistema sesiones seguro para múltiples control contraseña con completo codigo autentificación autenticación administrador php css sanitization

usuarios - sistema login php mysql seguro?



Desinfectar el CSS definido por el usuario en PHP (3)

Quiero permitir que los usuarios usen sus propias hojas de estilo para sus perfiles en mi foro, pero temo las posibles vulnerabilidades de seguridad. ¿Alguien tiene algún consejo para desinfectar CSS?

Proceso básico: el usuario ingresa CSS en forma -> Guardar en DB -> Salida como CSS en línea



No veo cómo esto podría crear vulnerabilidades de seguridad, a menos que los perfiles se compartan con otros usuarios.

Si se comparten, podrían surgir vulnerabilidades de CSRF (ya que CSS puede generar solicitudes GET para incluir imágenes, fuentes, otras hojas de estilo, etc.). También podrían usar el content para engañar a los usuarios y hacer clic en algunos lugares, ocultar funcionalidades importantes, etc. Y, por supuesto, tendrías que escapar < , > y posiblemente & para evitar XSS (si el CSS está incrustado en el HTML).

En cuanto a las bibliotecas para realizar el saneamiento, no conozco ninguna (quizás esté ordenada).


HTMLPurifier con CSSTidy hace lo que estás buscando.

HTMLPurifier está diseñado principalmente para desinfectar HTML, pero también tiene una opción para extraer bloques de estilo con CSSTidy.

Hay un ejemplo en los documentos HTMLPurifier (pero, por desgracia, he agotado mis dos enlaces por publicación).

Aquí está otro:

require_once ''./htmlpurifier/library/HTMLPurifier.auto.php''; require_once ''./csstidy/class.csstidy.php''; // define some css $input_css = " body { margin: 0px; padding: 0px; /* JS injection */ background-image: url(javascript:alert(''Injected'')); } a { color: #ccc; text-decoration: none; /* dangerous proprietary IE attribute */ behavior:url(hilite.htc); /* dangerous proprietary FF attribute */ -moz-binding: url(''http://virus.com/htmlBindings.xml''); } .banner { /* absolute position can be used for phishing */ position: absolute; top: 0px; left: 0px; } "; // Create a new configuration object $config = HTMLPurifier_Config::createDefault(); $config->set(''Filter.ExtractStyleBlocks'', TRUE); // Create a new purifier instance $purifier = new HTMLPurifier($config); // Turn off strict warnings (CSSTidy throws some warnings on PHP 5.2+) $level = error_reporting(E_ALL & ~E_STRICT); // Wrap our CSS in style tags and pass to purifier. // we''re not actually interested in the html response though $html = $purifier->purify(''<style>''.$input_css.''</style>''); // Revert error reporting error_reporting($level); // The "style" blocks are stored seperately $output_css = $purifier->context->get(''StyleBlocks''); // Get the first style block echo $output_css[0];

Y la salida es:

body { margin:0; padding:0; } a { color:#ccc; text-decoration:none; } .banner { }