Sto imparando PHP per conto mio e ho preso coscienza dei strip_tags () la funzione. È questo l'unico modo per aumentare la sicurezza?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

Domanda

Sono nuovo di PHP e sto seguendo un tutorial qui: link

E 'piuttosto spaventoso che un utente può scrivere codice PHP in un ingresso e in fondo a vite vostro sito, giusto?

Bene, ora sono un po 'paranoico e preferirei imparare le best practice di sicurezza destra fuori del blocco che cercare di stipare loro in una volta che ho alcune abitudini in me.

Dal momento che sono nuovo di zecca per PHP (letteralmente lo raccolse due giorni fa), posso imparare praticamente qualsiasi cosa facilmente senza confondersi.

Quale altro modo posso evitare imbrogli sul mio sito? : D

È stato utile?

Soluzione

Ci sono molte cose da tenere a mente quando si sviluppa un'applicazione PHP, strip_tags() aiuta solo con uno di quelli. In realtà strip_tags(), mentre efficace, potrebbe anche fare di più del necessario:. Convertire caratteri potenzialmente pericolosi con htmlspecialchars() dovrebbe nemmeno essere preferibile, a seconda della situazione

In generale tutto si riduce a due semplici regole: filtro tutti gli input, la fuga tutto l'output Ora è necessario capire che cosa costituisce esattamente input e output..

L'uscita è facile, tutto ciò che l'applicazione invia al browser è uscita, in modo da utilizzare ogni volta htmlspecialchars() o qualsiasi altra funzione fuga i tuoi dati in uscita non hai scritto te stesso.

L'ingresso è tutti i dati non è hardcoded nel codice PHP: cose proveniente da un formulario tramite POST, da una stringa di query tramite GET, dai biscotti, tutti coloro che deve da filtrare in modo più appropriato a seconda alle vostre esigenze. Anche i dati provenienti da un database devono essere considerati potenzialmente pericolosi; in particolare su server condiviso si sa mai se il database è stato compromesso altrove in un modo che potrebbe influenzare la vostra applicazione troppo.

Ci sono diversi modi per filtrare i dati: liste bianche per consentire solo valori selezionati, convalida sulla base formato di input expcted e così via. Una cosa che non ho mai suggerisco è provare a fissare i dati che si ottiene da parte degli utenti:. Farli giocare secondo le tue regole, se non si ottiene ciò che vi aspettate, respingere la richiesta invece di cercare di ripulirlo

Una particolare attenzione, se avete a che fare con un database, deve essere pagato per le iniezioni SQL: quel tipo di attacco si basa su di voi non costruire correttamente le stringhe di query che si invia al database, in modo che l'utente malintenzionato può stringere loro cercando di eseguire istruzioni dannoso . Si dovrebbe sempre utilizzare una funzione in fuga, come mysql_real_escape_string() o, meglio, utilizzare le istruzioni preparate con il mysqli estensione o utilizzando DOP .

Non c'è altro da dire su questo argomento, ma questi punti dovrebbe iniziare.

HTH

Modifica : per chiarire, da "input filtering" intendo decidere che cosa è bene e ciò che è male, non modifica i dati di input in alcun modo. Come ho detto che non avrei mai modificare i dati degli utenti a meno che il suo output al browser.

Altri suggerimenti

strip_tags non è la cosa migliore da usare in realtà, non protegge in tutti i casi.

HTML Purify: http://htmlpurifier.org/

È una vera e propria buona opzione per l'elaborazione di dati in arrivo, tuttavia si continua a non soddisfare tutti i casi d'uso -. Ma è sicuramente un buon punto di partenza

Devo dire che il esercitazione lei ha citato è un po 'fuorviante sulla sicurezza :

  

E 'importante notare che non si vuole lavorare direttamente con il $ _GET e $ _POST valori. Invia sempre il loro valore a una variabile locale, e lavorare con esso là. Ci sono diverse implicazioni di sicurezza coinvolti con i valori quando si accede direttamente (o   uscita) $ _GET e $ _POST.

Questa è una sciocchezza. Copia di un valore a una variabile locale non è più sicuro che usare direttamente le variabili $ _GET o $ _POST.

In realtà, non c'è nulla di intrinsecamente insicuri su tutti i dati. Ciò che conta è che cosa fare con esso . Ci sono motivi perfettamente legittimi per cui si potrebbe avere una variabile $ _POST che contiene ; rm -rf /. Questo va bene per la stampa su una pagina HTML o la memorizzazione in un database, per esempio.

L'unica volta che è pericoloso è quando si sta utilizzando un comando come system o exec. E questo è il tempo necessario per preoccuparsi di ciò che le variabili che si sta utilizzando. In questo caso, si sarebbe probabilmente desidera utilizzare qualcosa di simile a una whitelist, o almeno eseguire i valori attraverso escapeshellarg.

Allo stesso modo, con l'invio di query al database, l'invio di HTML ai browser, e così via. Fuga dei dati a destra prima di inviarlo da qualche altra parte, utilizzando il metodo fuga appropriato per la destinazione.

strip_tags rimuove ogni pezzo di html. soluzioni più sofisticate sono basate su whitelist (vale a dire permettendo specifici tag html). una buona biblioteca whitelisting è htmlpurifyer http://htmlpurifier.org/

e, naturalmente, sul lato banca dati di cose utilizzare funzioni come mysql_real_escape_string o pg_escape_string

Beh, probabilmente mi sbaglio, ma ... In tutta la letteratura, ho letto, la gente dire che è molto meglio usare htmlspellchars.

Inoltre, piuttosto necessario lanciare dati di input. (Per int, ad esempio, se si è certi che sia id utente).

Bene, in anticipo, quando potrai iniziare con banca dati -. Uso mysql_real_escape_string invece di mysql_escape_string per evitare iniezioni SQL (in alcuni vecchi libri è mysql_escape_string ancora scritto)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top