Poiché si tratta di un problema risalente a diversi anni fa, alcune cose cambiano e i link esterni generalmente si piegano in quanto i siti non gestiscono o indirizzano i collegamenti che potrebbero esistere in altri siti.
Quindi andando avanti, PHP è passato un po 'e molte persone chiedono informazioni sulla disinfezione degli input, ma l'uso di filter_var
è sottile sul terreno, mentre non perfetto è dalla mia lettura, binario sicuro.
Quindi ottieni un indirizzo email, bene a meno che non usi HTML5 quando dovresti usarlo in combinazione con PHP filter_var
, il tuo sito sarà più sicuro di chi scrive una routine per disinfettare un input che non lo fa t utilizzare input HTML5. Scrivere codice per la compatibilità a ritroso per i browser non conformi a HTML5 è completamente inutile e uno spreco di risorse e tempo.
L'altro problema di sicurezza è che i valori di $ _GET e $ _POST sono volatili e possono essere modificati o modificati esternamente da dati validi a dati non validi, pertanto qualsiasi routine di sanitizzazione che li utilizza e restituisce input puliti in essi è appena maturato per i guai ... L'array $ _REQUEST è più sicuro, una volta impostato nel tuo array sicuro, non può essere modificato, quindi popola il tuo array sicuro prendendo input e amp; filter_var li inserisce nell'array sicuro.
Come faccio a disinfettare gli input è qualcosa di simile a ciò che segue ...
$someSafeArray = array(
"thefield"=>FILTER_SANITIZE_STRING,
"theNumberfield"=>FILTER_SANITIZE_NUMBER,
"theEmailfield"=>FILTER_SANITIZE_EMAIL
);
foreach( $someSafeArray as $fld=>&$val)
$val = filter_var( trim( $_REQUEST[$fld] ), $val );
Quindi questo restituirà tutti i campi (dai tasti) e gli input sterilizzati verranno quindi inseriti nei valori di quelle chiavi nell'array sicuro.
Questo significa che io uso le chiavi di una white-list (array) per SOLO prendere gli input che ho designato come campi validi. Troppe persone ho visto offrire processori "dinamici" che accettano NESSUN contributo, NO !!! Devi accettare solo i flussi di dati che il tuo codice / modulo è progettato per gestire.
SALE la tua pagina con un valore che il tuo modulo di ricezione può ricalcolare l'hashing corretto per verificare che il tuo modulo sia stato emesso dal server, campi EMPTY, includo almeno un firld vuoto che è readonly, nascosto come i campi hash ma l'intenzione è per determinare se il modulo è stato inserito o meno, un bot riempirà tutti i campi con i dati per provare a decifrare la pagina aperta.
SO Adescando la tua pagina con un paio di campi fittizi come ...
<input name="userlogin" type="hidden" value="" readonly />
<input name="empty" type="hidden" value="" readonly />
se il modulo è arrivato sul tuo server con qualcosa nel campo del valore di entrambi gli input, puoi anche cessare qualsiasi elaborazione dei moduli e registrare l'IP dell'utente e bloccarli in quanto sono un bot o un hacker.
L'iniezione non è solo un problema SQL, è un problema di pagina PHP, quindi stai attento a quali campi accetti, a cosa salt
e bait
del tuo modulo e gestisci una white-list.
STOP USANDO GET per passare i parametri di controllo, USA un cookie di sessione poiché questo riduce gli input allo script, Se utilizzo un URL di tipo GET, è solo per una tattica sovversiva e consente il monitoraggio degli utenti che inseriscono le variabili nell'URL e altre cose da provare e hackerare.
Ho usato un processo come questo da prima che venisse introdotta la funzione filter_var, stavo salendo le pagine senza la necessità di un database per convalidare le pagine in arrivo ed era qualcosa che mi è stato ripetutamente detto dai cosiddetti professionisti non era possibile , beh, l'unica cosa che devo dire è che "è se riesci a pensare al di fuori della piastra della caldaia (box)" e abbastanza semplice da contrastare i tentativi di hacking, proteggere le pagine del tuo modulo.