Colaboraciones anónimas
Tenemos un par de proyectos en marcha que van a necesitar que les visitantes suban artículos directamente al sitio. Ya tenemos forma de hacerlo con invitaciones, pero esta vez sería sin registro ni confirmación de correo, anónima-adhocráticamente. La idea es que le visitante entre y pueda dejar un artículo para revisión.
Se me ocurren las siguientes cosas:
-
En lugar de generar el formulario de carga en Sutty usando los layouts, el formulario reside en el sitio mismo. Esto hace que trabajemos un poco de más, pero nos da la flexibilidad de generar los formularios como queramos (al estilo formulario de contacto) y que queden asociados al diseño del sitio.
-
Escribir un plugin de Jekyll que sea capaz de leer
_data/layouts/articulo.yml
y generar un formulario correspondiente, al estilo de Sutty. (No sería estrictamente necesario para esta feature, pero estaría bueno tenerlo?) -
El formulario envía los datos a Sutty, que detecta si el sitio permite colaboraciones anónimas, valida los datos y los sube a un artículo del layout correspondiente, como borrador. Envía una notificación a les usuaries del sitio, con el link para revisión.
-
Hasta ahí todo bien, lo que me preocupa es la subida de archivos. Permitimos subir archivos así como así? (Pregunta técnica: Usamos ActiveStorage o recibimos directamente el archivo y lo procesamos internamente? Esto implica que el archivo se sube con JS a otra URL y luego se envían los metadatos con el formulario. Creo que prefiero recibir el archivo directamente y procesarlo internamente como ActiveStorage)
Pienso que sería un vector de ataque para los sitios. Por un lado que se llene de artículos el sitio, en un mini DDOS que no permita administrarlos y la otra es que nos llenen el servidor de archivos, lo que sería más problemático. Cómo se puede prevenir esto? Lo más probable es que no pase nada en la mayoría de los casos y termine complicando las cosas más que previniendo mala conducta (como siempre!). Se podrá hacer de forma simple, sin limitaciones ridículas?