Directrices de codificación segura

Contenido

Visión general

Aunque el uso de API es útil y conveniente, tenga en cuenta los siguientes riesgos al codificar:

  • Pueden surgir problemas de seguridad como resultado del código
  • Es posible que el servicio kintone.com no funcione correctamente como resultado del código

En este artículo, explicaremos puntos importantes a la hora de programar con la API.

Evite el cross-site scripting (XSS) y la inyección de CSS

Cross-Site Scripting (XSS) es una vulnerabilidad de seguridad que permite a los atacantes inyectar scripts maliciosos en un sitio web.
Al igual que XSS, la inyección de CSS es una vulnerabilidad de seguridad que permite a los atacantes inyectar CSS malicioso en un sitio web.
Estos scripts se ejecutan dentro de los navegadores de los visitantes del sitio web, a menudo sin su conocimiento o consentimiento.

Posibles amenazas

Los programas con vulnerabilidad XSS o inyección de CSS pueden dar lugar a las siguientes amenazas:

  • los datos que se encuentran en Kintone pueden ser robados
  • Es posible que se muestren sitios falsos
  • Es posible que se almacenen cookies maliciosas en el navegador web

Código de ejemplo con vulnerabilidad

1
2
3
const text1 = document.getElementById('text1');
const div1 = document.getElementById('div1');
div1.innerHTML = '<input type="text" value="' + text1.value + '" />';

En este código, se crea un cuadro de texto a partir del valor de text1.
Un código no deseado por el creador del código puede ejecutarse colocando el siguiente código para text1.

1
"onclick="alert(1)

Prevención del XSS

Escape de todos los elementos emitidos

Las cadenas que se transmiten desde programas externos y los caracteres especiales (< , > , " ) de los que se debe escapar. Deberá tener algunos conocimientos sobre el escape de elementos HTML, pero le recomendamos que evite crear dinámicamente contenido HTML con el uso de document.write y innerHTML. Sin embargo, puede evitar el XSS común mediante el uso de innerText en lugar de innerHTML.

Limite las salidas de URL a "http://" o "https://"

La creación dinámica de atributos href (para a tags) o atributos src (para img tags) de entradas externas tiene el riesgo de incrustación de cadenas que comienzan con JavaScript:. Para evitar esto, limite las salidas de las URL a aquellas que comiencen con http:// o https://.

Evite crear elementos basados en valores de entrada externos

A continuación, se muestra un código de ejemplo que debe no correr.

1
2
3
4
5
6
7
const tag = document.createElement('script');

// Don't to the following
tag.innerHTML = untrusted;

// Use innerText
tag.innerText = untrusted;
No cargue archivos JavaScript y CSS que se encuentren en sitios externos que no sean de confianza

Existe el riesgo de que el contenido del archivo que está cargando se cambie inesperadamente un día a un programa que robe su información. Asegúrese de que puede confiar en el sitio desde el que está cargando el script.

Usar HTTPS

Los servicios en kintone.com utilizan HTTPS para cifrar la comunicación a través del navegador web.
Cuando se conecte con sistemas externos, asegúrese de usar API que usen HTTPS.

Almacene la información de autenticación y autorización de forma adecuada

Al integrarse con servicios externos, la información de autenticación y autorización para servicios externos debe almacenarse en algún lugar.
Teniendo en cuenta el impacto de cualquier filtración de dicha información, decida cuidadosamente dónde debe almacenarse la información de autenticación/autorización. Además, limite el alcance de la divulgación de la información de autenticación/autorización.
En particular, la personalización de JavaScript tiende a almacenar la información de autenticación/autorización en ubicaciones donde los usuarios generales pueden verla.

Ejemplos de información de autenticación/autorización

  • Contraseñas
  • Claves de API
  • Secretos de cliente de OAuth y tokens de acceso

Dónde almacenar la información de autenticación/autorización

En esta sección se presentan las siguientes ubicaciones de almacenamiento:

  • Ubicaciones recomendadas: Ubicaciones de almacenamiento que solo pueden ver los administradores
  • Ubicaciones desaconsejables: Ubicaciones de almacenamiento que pueden ser vistas por usuarios generales

La siguiente información es solo de referencia. Considere cuidadosamente las ubicaciones de almacenamiento adecuadas, teniendo en cuenta las consecuencias de las fugas de seguridad.

Las funciones de proxy para las personalizaciones de complementos limitan el alcance de la divulgación de la información de autenticación/autorización a los usuarios con permisos de administrador para aplicaciones.
Las cookies HttpOnly impiden el acceso desde JavaScript.

Lugares de almacenamiento desaconsejables

Se puede acceder al almacenamiento web, que a menudo se usa para almacenar información, desde cualquier código JavaScript.
Del mismo modo, también se puede acceder a la configuración del complemento Kintone y a las cookies que no son HttpOnly a través de JavaScript.
Por lo tanto, existe la posibilidad de que la información de autenticación/autorización se utilice indebidamente, por ejemplo, si se accede a un sitio malintencionado.

Almacene los datos de forma adecuada

La información personal y confidencial se puede recuperar de los datos que se encuentran en kintone.com. Si va a guardar esta información en una aplicación externa, diseñe y opere el sistema con mucha precaución para no filtrar información privada.
Especialmente, no codifique datos importantes como contraseñas en su programa.

Otras precauciones al usar personalizaciones de JavaScript

Restricciones entre dominios

Debido a las restricciones entre dominios, no se puede ejecutar la comunicación entre kintone.com y sitios externos mediante XHR(XMLHttpRequest). No se puede agregar el encabezado Access-Control-Allow-Origin.

Recuperación de cookies a través de JavaScript

Como las cookies de kintone.com tienen atributos Httponly, estas cookies no se pueden recuperar mediante JavaScript.

Redireccionamiento a sitios externos

Si la dirección URL que se pasa a los siguientes objetos se crea dinámicamente a partir de valores de entrada externos, ejecute una comprobación en la dirección URL creada para ver si está en el formato deseado:

  • location.href
  • document.location
  • window.open

Usar el "modo estricto"

El uso del modo estricto de JavaScript evitará errores de codificación y hará que su código sea más seguro. Para obtener más información sobre el modo estricto, consulte la siguiente página en MDN Web Docs:
Modo estricto (External link)

Características principales del modo estricto:

  • Los valores solo se pueden colocar en variables declaradas

  • el alcance de las variables declaradas dentro de la variable eval() función está limitada dentro de esa función.

  • arguments.calee no se admite

    1
    2
    
    'use strict';
    mistypedVaraible = 17; // throws a ReferenceError