Mi è stato chiesto di controllare un'applicazione PHP. Nessuna struttura, nessun router, nessun modello. PHP puro. Poche funzioni condivise. HTML, CSS e JS tutti mescolati insieme. Ho scoperto numerosi posti in cui l'iniezione SQL sarebbe facilmente possibile. Ci sono altri problemi con l'applicazione (vulnerabilità XSS, CSS inline dilagante, copia del codice incollato ovunque) ma questo è il più grande. A volte sfuggono agli input, non usano una query preparata o nemmeno mysql_real_escape_string (), attenzione, ma usando addslashes (). Spesso, tuttavia, le loro query hanno esattamente lo stesso aspetto (incollate dal codice ma con le colonne e i nomi delle variabili modificati):
$user = mysql_query("select * from profile where profile_id='".$_REQUEST["profile_id"]."'");
Gli sviluppatori in questione hanno affermato di non essere in grado di modificare la loro applicazione. Ho provato, e ho trovato mod_security da abilitare, risultando in HTTP 406 per alcuni ovvi attacchi di SQL injection. Credo che ci siano soluzioni sofisticate per mod_security, ma non ho il tempo di inseguirli.
Affermano che si tratta di una questione "concettuale" e non "pratica" poiché l'applicazione non può essere facilmente hackerata. Il loro revisore interno ha convenuto che ci sono stati problemi, ma ha sottolineato la natura concettuale dei problemi.
Usano anche questo argomento concettuale / pratico per difendersi da CSS e JS incorporati, assenza di organizzazione del codice, vulnerabilità XSS e massicce quantità di ripetizioni.
Il mio cliente (giustamente, forse) vuole solo che questo vada via in modo che possano lanciare il loro prodotto. Il sito funziona. Puoi accedere, fare ciò che devi fare e le cose sono visibilmente funzionali, se lente. SQL Injection sarebbe davvero difficile da fare, data la mod_security. Inoltre, il loro modo di parlare di "concettuale e pratico" è retoricamente brillante, considerando che il mio cliente non comprende la sicurezza delle applicazioni web. Mi preoccupo che siano riusciti a farmi sembrare un puritan arrabbiato.
In molti modi, questo è un problema di politica, non di tecnologia, ma sono in perdita. Come sviluppatore, voglio dire loro di lanciare l'intero progetto e ricominciare da capo con una nuova squadra, ma devo affrontare una strong difesa da parte del team che l'ha costruita e un cliente che ha davvero bisogno di spedire il loro prodotto.
La mia posizione è troppo severa? Anche se risolvono i problemi di SQL Injection e XSS, posso mai sostenere il rilascio di un intreccio intrattabile di codice spaghetti?
EDIT: per quanto riguarda il mio ruolo in questo progetto, non sono un esperto in sicurezza, sono un generalista sviluppatore web. inizialmente il cliente mi chiedeva di caricare il test dell'app e di formulare raccomandazioni per la scalabilità. Non sono ancora arrivato così lontano, perché quando ho letto per la prima volta l'output della home page, ho visto CSS in linea, layout basati su tabelle e tutti i tipi di JS pazzo, quindi ho richiesto una copia del codice, dove ho trovato il disastro empio descritto sopra. Non hanno nemmeno astratto l'intestazione e il piè di pagina HTML. Ogni file PHP ha una versione incollata leggermente diversa.
Per quanto riguarda l'app stessa, memorizza le informazioni personali e elabora (ma non memorizza) i dati delle carte di credito.