Evitar inyección de código de eventos onclick

  • Autor Autor JetLagFox
  • Fecha de inicio Fecha de inicio
J

JetLagFox

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Soy muy novato en cuanto a programación y me está costando encontrar la información necesaria para mantener seguro el foro que estoy creando. De momento tan sólo paso el texto introducido por el usuario mediante los siguientes "filtros":

HTML:
function evitamos_script($texto) {

    $limpia = strip_tags($texto, '<b> <i> <u> <quote> <img> <center> <code> <cite> <div> <a> <blockquote> <iframe> <video> <embed>'); //EVITAMOS SCRIPTS

    return $limpia;
}

He buscado en muchos sitios el proceso a seguir pero sigo sin dar con la tecla. Por ejemplo, podrían inyectarme código de la siguiente forma:

HTML:
<div onclick="console.log('código inyectado');">Texto</div>

¿Cómo puedo evitar este problema de seguridad? No quiero usar htmlspecialchars() debido a que quiero permitir que los usuarios puedan poner código como los que permito con strip_tags().

Estoy totalmente perdido con este tema, ni siquiera sé si tengo que hacerlo con JS o PHP.😕
 
Puedes utilizar un metalenguaje ejemplo BBCode, para que sea el intermediario entre el que crea el articulo y la versión HTML del mismo.

Desde ya, dejar que el usuario pueda ingresar codigo HTML, es sumamente peligroso e imposible de limpiar todo. Es por eso que se creo el BBCODE.

SCEditor - A lightweight WYSIWYG HTML and BBCode editor - SCEditor

Saludos

Gracias por tu respuesta. El problema con los editores BBCode es que se cargan el diseño completamente. Antes usaba TinyMCE pero quedaba tan mal visualmente que decidí hacerlo por mi cuenta. ¿Hay alguno que se pueda editar no sólo los botones que quieres que se muestren, sino los iconos y diseño CSS?
 
Hola,
El que te pase, podes editar todo. Cualquiera de código abierto podes editar todo.

Saludos
 
No solo onclick, sino onload e incluso onerror

Como te dijeron, lo mejor es usar BBcode, o algo similar.
Acá un ejemplo de un script: Create Simple PHP BBCode Parser function

O bien, buscar un editor WYSIWYG que se adapte a lo que buscas.
 
Gracias por las respuestas, aunque no sé si voy a poder conseguir lo que ahora mismo tengo en cuanto a diseño. Lo que no sé si puedo también es agregar opciones que el editor no traiga, añadir nuevos botones por ejemplo.
 

Temas similares

Atrás
Arriba