Intégrité de l'ASAR
Plateformes prises en charge
Actuellement, la vérification de l’intégrité de l'ASAR n’est prise en charge que sur macOS.
Spécifications requises
Electron Forge / Electron Packager
Si vous utilisez >= electron-packager@15.4.0
ou >= @electron-forge/core@6.0.0-beta.61
toutes les conditions sont remplies automatiquement pour vous et vous pouvez passer à Basculer le fusible.
Autres systèmes de génération
Pour activer la vérification de l’intégrité ASAR, vous devez vous assurer d'abord que votre fichier app.asar
a été généré par une version du package npm asar
qui prend en charge cette intégrité asar. Le support a été introduit dans la version 3.1.0
.
Vous devez ensuite remplir un bloc de dictionnaire ElectronAsarIntegrity
valide dans la Info.plist
de vos applications empaquetées . Voici donc un exemple.
<key>ElectronAsarIntegrity</key>
<dict>
<key>Resources/app.asar</key>
<dict>
<key>algorithm</key>
<string>SHA256</string>
<key>hash</key>
<string>9d1f61ea03c4bb62b4416387a521101b81151da0cfbe18c9f8c8b818c5cebfac</string>
</dict>
</dict>
Les valeurs de algorithm
valides ne comprennent pour le moment que la valeur SHA256
. Le hash
est un hachage de l’en-tête ASAR effectué à l’aide de l’algorithme donné. Le package asar
expose une méthode getRawHeader
dont le résultat peut ensuite être haché pour générer cette valeur.
Basculement du fusible
La vérification de l’intégrité de l'ASAR est actuellement désactivée par défaut et peut être activée en basculant un fusible. Voir Electron Fuses pour plus d'informations sur ce que sont les fuses Electron et comment ils fonctionnent. Lorsque vous activez ce fusible, c'est que généralement, vous désirez aussi activer le fusible onlyLoadAppFromAsar
, sinon la vérification de la validité peut être contournée via le chemin de recherche du code de l’application Electron.
require('@electron/fuses').flipFuses(
// E.g. /a/b/Foo.app
pathToPackagedApp,
{
version: FuseVersion.V1,
[FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true,
[FuseV1Options.OnlyLoadAppFromAsar]: true
}
)