Perché Twitto non è sicuro?

3

Mi sono imbattuto in Twitto , che in pratica è un framework web che si inserisce in un tweet. È così breve che posso postare il codice qui:

require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
  throw new Exception('Error');
$c();

Cerca fondamentalmente un file chiamato c.php e chiama qualsiasi funzione in quei file che ha lo stesso nome di $_GET['c'] .

Sul sito web del progetto, c'è un grande banner rosso nella parte inferiore della pagina che legge:

» TWITTO IS NOT SECURE, DON'T USE IT FOR YOUR NEXT WEBSITE «

Non sono un guru PHP, ma per me sembra che se prendi tutte le precauzioni che usi normalmente con un sito PHP standard (sanitizzazione dell'input dell'utente, ecc.), dovrebbe essere abbastanza sicuro?

Cosa c'è di sbagliato in questo piccolo framework?

EDIT: Capisco perché questo framework non sia sicuro AS-IS, ma con i controlli di bootstrap e validazione appropriati e tutto all'interno della funzione che chiamate, dovrebbe essere altrettanto sicuro di qualsiasi altro framework?

    
posta marco-fiset 15.03.2012 - 20:43
fonte

2 risposte

2

Questo non è sicuro, dal momento che consente di eseguire qualsiasi funzione disponibile sul tuo sistema.

È difficile trovare un buon esempio di una funzione che causerà troppi danni, dal momento che, ad esempio, PHP non ha una funzione senza parametri "format my server". Ancora:

twitto.php?c=phpinfo

per esempio mostrerà tutto ciò che riguarda il tuo sistema a un hacker. Abbastanza carino, vero?

Allo stesso modo, puoi aggiungere alcune funzioni senza parametri alla tua app, senza aspettarti che vengano chiamate dagli utenti finali. Ad esempio:

  • DisplayUsersInfo() svuota le informazioni sugli utenti, inclusi i dati sensibili,

  • ShowAdminTab(TAB_USERS) mostra la scheda utenti nel pannello di amministrazione chiamando DisplayUsersInfo .

Il ShowAdminTab($tab) viene chiamato solo dopo l'autenticazione e altri mezzi che proteggono il pannello di amministrazione dall'accesso non autorizzato. Belle. Quindi qualcuno chiama twitto.php?c=DisplayUsersInfo . Nessuna autenticazione richiesta.

    
risposta data 15.03.2012 - 22:00
fonte
1

Per questo motivo:

The "Hello World!" controller is now accessible at /twitto.php?c=hello_world.

Chiunque può eseguire il codice PHP SERVER SIDE da qualsiasi browser! (Con un semplice HTTP GET)!

EDIT Sono abbastanza sicuro che questa chiamata qualsiasi funzione standard di PHP , non solo quelli del file C.php , come puoi proteggerlo?

    
risposta data 15.03.2012 - 21:09
fonte

Leggi altre domande sui tag