Directrices de codificación segura
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
|
|
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.
|
|
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.
|
|
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.
Ubicaciones de almacenamiento recomendadas
- Ubicaciones de backend (bases de datos en servidores o plataformas sin servidor)
- Ajustes de configuración del proxy del complemento de Kintone
- HttpOnly Cookies
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
- Programas front-end (por ejemplo: Personalización de JavaScript de Kintone)
- Almacenamiento web (localStorage, sessionStorage)
- Ajustes de configuración del plug-in de Kintone
- Cookies que no son HttpOnly
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
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 admite1 2
'use strict'; mistypedVaraible = 17; // throws a ReferenceError