Porting di sicurezza da Java / .NET a PHP

1

Questa probabilmente è una domanda piuttosto ingenua data la mia conoscenza limitata del codice che ho visto, ma voglio capirlo prima di iniziare a immergermi nella scrittura del codice vero e proprio.

Sto scrivendo un set comune di strumenti per PHP e la maggior parte della mia ispirazione proviene dal framework .NET. La cosa ironica è che non ho mai usato il framework .NET, ma capisco C # e posso quindi portare i concetti che "capisco" da Mono.

Ma ho incontrato un po 'di muro, System.Security . Mentre sfoglio i documenti API e le implementazioni di sicurezza Mono su Github, mi sembra che nessuna delle funzionalità possa mai essere applicata a PHP. La mia attuale confusione è la seguente:

PermissionSet ps1 = new PermissionSet(PermissionState.None);
ps1.AddPermission(new FileDialogPermission(FileDialogPermissionAccess.Open));
Console.WriteLine(ps1.ToXml().ToString());

Quindi ecco un esempio di base. Quello che voglio fare in PHP è creare un'applicazione parzialmente governata da permessi a livello "ambiente". Vale a dire, una macchina non dovrebbe essere in grado di eseguire determinate azioni che un'altra potrebbe. Ad esempio, la macchina A, non dovrebbe essere permessa a TCP per lavorare B.

Ma quando guardo il codice nell'esempio, non capisco davvero perché faccia alcuna differenza. La mia attuale comprensione è che non si tratta di "impostare" i permessi, ma di "controllarli". E il permesso stesso è predefinito da qualche altra parte, I.E. nella macchina.

Ho esaminato l'implementazione di Java della stessa funzionalità, e parallelamente .NET ha un aspetto molto più approfondito. Vorrei incorporare questo concetto nel mio codice PHP, ma al momento non so come lo farei.

Le autorizzazioni sono interamente arbitrarie? .NET impone restrizioni? o semplicemente fornire diagnostica di sicurezza all'applicazione? Se l'ultimo è vero, il porting su PHP non solo è possibile, ma potrebbe essere piuttosto utile. Comunque so che in PHP, il secondo è impossibile.

Qualcuno potrebbe chiarire cosa fanno gli spazi dei nomi di sicurezza Java e .NET e farmi un'idea di quanto sia fattibile portarlo in altre lingue.

    
posta Flosculus 16.08.2015 - 22:29
fonte

1 risposta

1

Ogni lingua ha un runtime che collega il tuo codice con il mondo esterno. Nel caso di Java e .NET, questo runtime include un modello di sicurezza. Per esempio. se un'applicazione Java vuole aprire un file, quella richiesta deve passare attraverso il runtime. Il runtime può quindi rifiutare quella richiesta. Si noti che questo non è implementato a livello di libreria all'interno della lingua, ma a livello di implementazione della lingua. Dall'interno del runtime, puoi solo controllare ciò che sei autorizzato a fare, ma non concederti nuove autorizzazioni.

Pertanto, non puoi semplicemente implementare un modello di sicurezza in un'altra lingua: il tuo livello di sicurezza avrebbe bisogno di un modo per eseguire l'azione sensibile alla sicurezza, ma allo stesso modo sarebbe disponibile per qualsiasi altro codice in quella lingua, quindi il tuo il livello di sicurezza potrebbe essere ignorato. Invece, questo modello di sicurezza deve essere nel runtime stesso (nel caso di PHP, questo sarebbe l'interprete nell'implementazione predefinita).

Ho visto un'eccezione: il modulo Safe di Perl può controllare quali opcode sono disponibili per una porzione di codice che viene compilata, che può servire come sandbox grossolano. Qui, il runtime non fornisce di per sé il modello di sicurezza, ma la natura dinamica del runtime viene sfruttata per implementare un modello di sicurezza su di esso.

PHP ha un paio di meccanismi sandboxing: E.g. Runkit può limitare le funzioni che possono essere chiamate da un pezzo di codice sandbox. Una tecnica di sandboxing comune prevede anche l'override delle funzioni incorporate dalle versioni che controllano le autorizzazioni, ma funziona solo finché non è possibile ripristinare la versione originale. Questo può essere un approccio percorribile quando si riscrive il codice compilato in modalità sandbox, ma gli approcci di sicurezza basati sulla riscrittura sono inclini a perdere le chiamate offuscate.

    
risposta data 16.08.2015 - 23:25
fonte

Leggi altre domande sui tag