¿Qué protocolos de URL, en caso de haberlos, debería incluir en la lista blanca o negra al crear el navegador del usuario?

3

Estoy escribiendo una aplicación con Electron pero supongo que esto sería un problema para cualquier software que te permita abrir enlaces en el navegador predeterminado del usuario a través del sistema operativo.

Supongamos que tengo una aplicación que lee algo como un feed de twitter y lo muestra. Así que la aplicación muestra 10 entradas. Algunas de esas entradas tienen enlaces provistos por el usuario. Si el usuario hace clic en un enlace, deseo iniciarlo en el navegador predeterminado del usuario.

En Electron me dicen que debería llamar a electron.shell.openExternal(url) . ¿Necesito estar filtrando URLs? Las URL comunes son, por ejemplo, http://xxx , https://xxx , mailto:xxx , por lo que podría incluir en la lista blanca esos 3 tipos de URL. Al mismo tiempo, no quiero limitar erróneamente una buena funcionalidad. En otras palabras, no tengo idea de qué otros esquemas válidos hay. Permitir ftp:// ? %código%? %código%? Así que preferiría simplemente pasar todo a través.

Al mismo tiempo, estoy preocupado, ¿hay URL potencialmente malas? Ejemplo hipotético: sftp://

¿Debo hacer una lista blanca? ¿Lista negra? ¿Filtrar? Si es así, ¿cuál es el filtro? ¿O debería simplemente pasarlos al sistema operativo?

    
pregunta gman 23.11.2016 - 20:50
fuente

1 respuesta

3
  

¿Debo hacer una lista blanca? ¿Lista negra? ¿Filtrar? Si es así, ¿cuál es el filtro? ¿O debería simplemente pasarlos al sistema operativo?

Debería usar la lista blanca. Iría por un mínimo razonable de http: , https: , mailto: y opcionalmente ftp: . Incluir más protocolos es innecesario si no tiene un caso de uso especial en mente. Dicho esto, algunos sistemas son más permisivos que otros. Los Wordpress docs definen esta lista de protocolos seguros en su función wp_allowed_protocols() :

  

Arreglo de protocolos permitidos. El valor predeterminado es una matriz que contiene 'http',   'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp',   'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', y   'webcal'.

Ninguno de estos es inherentemente inseguro, pero no tendrá ningún caso de uso para una URL fax: o gopher: .

  

Al mismo tiempo, estoy preocupado, ¿hay URL potencialmente malas?

Hay pseudo-protocolos que tienen efectos secundarios. Definitivamente, las URL javascript: no deberían ser posibles. El esquema file: también es peligroso porque los archivos locales a menudo tienen más privilegios que el contenido web. Para Firefox, especialmente no desea permitir URI de chrome: y resource: .

Este es un buen ejemplo de un problema en el que solo funcionan las listas blancas, ya que no es posible realizar un seguimiento de todos los esquemas URI personalizados y sus efectos para cada navegador.

    
respondido por el Arminius 23.11.2016 - 21:00
fuente

Lea otras preguntas en las etiquetas