2012-11-05 8 views
5

Ho un server Web scritto in node.js, praticamente serve solo all'utente con file statici. Per aggiungere il supporto PHP ad esso ho pensato che potevo semplicemente scaricare PHP e dare a PHP.exe il file. Questo funziona e sarà sufficiente se sarà usato da un singolo utente. Per un ambiente in cui più utenti avrebbero ospitato il proprio sito Web sul server, tuttavia avrebbe portato con sé un enorme problema di sicurezza. Uno potrebbe usare uno script PHP per fare qualsiasi cosa lui/lei vorrebbe con qualsiasi altro sito web o anche l'intero server.Utilizzare node.js per sostituire apache/nginx ed eseguire la sicurezza php

Oh, ho già detto che è un server Windows?

In ogni caso, quindi quello che voglio è ottenere alcune autorizzazioni per mantenere lo script php all'interno di una directory specifica. Sto pensando alla creazione di un utente per ciascun sito Web sul quale applicherò le autorizzazioni appropriate e rispetto all'esecuzione di php.exe usando qualcosa come "esegui come" (supponendo che sia possibile). Ci sono altri modi per raggiungere il mio obiettivo? E se fosse così sarebbe meglio? Perchè così?

Anche se siete interessati, il mio codice è simile: http://pastebin.com/gZjN1mnj

Anche io sono consapevole del fatto che $ _POST, $ _SERVER, $ _COOKIE, $ _SESSION ecc sono tutti manca quando si utilizza il server, ma io Ho già pensato a come ottenere quello fisso e ho avuto un test di successo con esso.

Ora sento già le risposte: perché diavolo lo faresti? OPPURE no, apache/nginx sono migliori, ecc. Ecc. Consideralo un processo di apprendimento, mi interessava solo sapere se potevo davvero far funzionare tutto ^^

Grazie.

+0

Si potrebbe provare a configurare un server php-fcgid con [php-fpm] (http://php.net/manual/en/install.fpm.php). –

+1

Quindi sembra chroot per windows, quindi dai un'occhiata a http://serverfault.com/questions/161507/is-there-a-windows-equivalent-to-chroot – Nelson

+0

Si prega di aggiornare il collegamento pastebin, non funziona ! :) –

risposta

4

Congratulazioni per la piattaforma Franken miscuglio vostro sviluppo :)

Passa a uso Linux process.setuid

Node.js è un grande server web, così posso vedere l'appello. Stai nuotando controcorrente eseguendo sia il nodo che il php su Windows. Se avessi il controllo, passerei a Linux.

Se si fosse in esecuzione in Linux, nodo ha un costruito nelle funzioni process.setguid e process.setuid Devi essere root per eseguire questi, ma un programma node.js poteva correre come root depongono le uova un processo di nodo per ogni utente, quindi effettuare il jail e instradare tutto il traffico ai processi del nodo figlio che vengono arrestati su utenti specifici.

Avere un php.ini specifica per ogni utente

È possibile utilizzare la modalità php sicura, base_dir e altri comandi ini per cercare di carcere php ad una specifica struttura di directory. Questo è traballante e incompleto e molte di queste funzionalità sono state deprecate o rimosse nelle ultime versioni a causa di bug e modi per aggirarle. Ma è banale da passare in un file ini con la tua chiamata da riga di comando php.

Usa terze pary utilità RUNAS

Per avere realmente la sicurezza degli utenti di Windows dovrete eseguire qualcosa di simile Autoit RunAs http://www.autoitscript.com/autoit3/docs/functions/RunAs.htm

in contrasto con i runas normali comandare questo si lascia specificare una password in modo che possa essere eseguita dal processo del nodo.

Problemi correlati