Come fanno gli sviluppatori a consentire i plug-in nelle loro app

1

Ho visto in alcune applicazioni che sono state scritte in lingue compilate dove i plug-in sono accettati e la soluzione alla domanda su come ancora mi sfugge. Ad esempio, in Eclipse, gli sviluppatori di Google Chrome, Firefox e IntelliJ possono scrivere plug-in per il software e funzionano come se si trovassero a prescindere dal programma.

Dalla mia comprensione di base, il codice di un programma non può essere modificato dopo che è stato compilato. Quindi si pone la domanda, com'è che alcune applicazioni Desktop e Mobile accettano plug-in scritti da altri sviluppatori dopo che il programma è stato compilato?

Qual è l'architettura alla base e in che modo gli sviluppatori verificano il codice dannoso e altri contrattempi?

    
posta Sheku Kanneh 21.07.2016 - 04:15
fonte

2 risposte

1

In Java carichi la classe dal disco e istanziali dal disco. La classe dovrebbe implementare l'interfaccia che l'app si aspetta da un plugin.

Ovviamente dovrebbe essere usato solo il plugin di sviluppatori fidati. Non c'è modo di evitare il malware .

In questo esempio ho questi due file nella cartella / tmp:

public interface ITest{
        public void test();
    }

e

 public class Test implements ITest {
        public void test(){
            System.out.println("OK");
        }
 }

In Eclipse ho questa classe di test:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;


public class Loader {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, MalformedURLException {
        //folder containing the class I want to load
        File file = new File("/tmp/"); 
        URL url = file.toURL(); 
        URL[] urls = new URL[]{url};        
        ClassLoader cl = new URLClassLoader(urls);
        // name of the class, in this example is a literal
        Class c = cl.loadClass("Prueba"); 
        //creates an instance of the class loaded from disk 
        //and castes it to the expected interface, note than
        //an identical interface ITest exists in our project
        ITest p = (IPrueba)c.newInstance(); 
        //run a method of the class 
        p.test(); 
    }

}

Output:

OK
    
risposta data 21.07.2016 - 13:50
fonte
1

Voglio dire che questa è una risposta parziale e non posso dire di conoscere i metodi defacto - se ce ne sono davvero - ma queste sono alcune cose che mi vengono in mente, e probabilmente dipende da cosa è appropriato:

  • Una dll - > questa è probabilmente la tua risposta qui e quello che stai cercando.
  • Processi indipendenti che consumano dati attraverso pipe, stdin, file condiviso, database, ecc.
  • Servizio separato
  • Plugin interpretato (pensa estensioni chrome)

Quindi l'altra parte, sono sicuro che qualcuno può spiegare le DLL meglio di me, ma devi capire che questo è essenzialmente solo opcodes e potresti immaginare di puntare a un indirizzo di memoria per la prossima istruzione durante il runtime invece di averlo essere determinato staticamente in anticipo Ovviamente ci sono dettagli in questo, ma probabilmente di livello inferiore a quello a cui tieni, perché per la maggior parte tutto è stato sottratto. Probabilmente c'è una libreria che viene fornita dal software per interagire con il programma principale (che in definitiva punta solo ad un codice compilato).

In termini di sicurezza, verifica la presenza di codice dannoso? Eh la mia impressione è che probabilmente c'è meno lavoro qui di quanto si pensi. Ovviamente se esponi solo alcune parti del codice dovresti stare bene, ma se è in esecuzione come lo stesso processo, immagino che potresti potenzialmente bufferizzare l'overflow e colpire qualsiasi parte del codice del programma che desideri se sei intelligente a riguardo . Forse alcuni analizzatori statici possono controllare? Penso che in generale i plugin siano come scaricare un eseguibile da solo nel fatto che devi semplicemente fidarti in qualche misura. Probabilmente potresti eseguire il sandbox eseguendolo come processo separato con privilegi ridotti in modo da non poter toccare determinate risorse, avere uno spazio indirizzo separato, ecc.

    
risposta data 21.07.2016 - 08:54
fonte

Leggi altre domande sui tag