Mi chiedo come (se possibile) sia la protezione XSS fornita in Laravel. Non ho trovato nulla a riguardo nella documentazione.Come e dove può essere applicata la protezione XSS in Laravel?
Problema
Sto usando Eloquent'screate()
metodo per inserire i dati nel database ($fillable
/$guarded
proprietà vengono impostate nei modelli). Come si è visto, posso liberamente mettere qualcosa di simile in input di testo di qualsiasi forma:
<script>alert('Hacking Sony in 3...2...')</script>
e il valore verranno inseriti nel database. Quindi, quando echo
viene visualizzato: viene visualizzato l'avviso.
Possibili soluzioni
Ora, laravel è un quadro molto bello, quindi vorrei assumere ci deve essere qualcosa per evitare XSS fuori dalla scatola. Tuttavia, non riesco a scoprire cosa sia.
Se ho torto, qual è il modo ottimale per gestire il problema?
- Uso la convalida regex di fantasia per disabilitare caratteri specifici?
- Devo usare
mysql_real_escape_string()
su ogniInput::get()
che uso? - Do I
strip_tags()
?
View-livello di fuga non è sufficiente
So che posso usare Lama di triple curly brackets per sfuggire stringhe nelle viste, non è questo il punto, però. In primo luogo, ha molto più senso per me non lasciare entrare quei bastardi nel database.
Chiunque ha già riscontrato questo problema?
Sono d'accordo che può essere un eccesso di manipolare ogni input prima di memorizzarlo. Ho, tuttavia, sentimenti contrastanti su questo approccio "solo uscita". Anche se '' è un nome utente valido, beh, non dovrebbe essere. Almeno in termini di input di testo stringhe come "
Per quanto ne so, la posizione "ufficiale" di Laravel è quella XSS prevention best practice is to escape output. Quindi,
{{{ }}}
.Puoi supplemento l'escape attraverso ingresso servizi igienico-sanitari con
Input::all()
,strip_tags()
, earray_map()
:fonte
2014-12-30 03:10:28 bishop
Un modo per andare. Al momento uso anche 'array_map()' per pulire 'Input's. Continuo a pensare che '{{{}}}' sia l'ultima risorsa. – lesssugar
@bishop puoi dare un esempio di come possiamo usare trip_tags() e array_map(). per evitare XXS – usama
@usama ho aggiunto un esempio. – bishop
ho esaminato la protezione del laravel
{{{...}}}
contro gli attacchi XSS. Utilizza semplicemente la funzionehtmlentities()
nel modo seguente:htmlentities('javascript:alert("xss")', ENT_QUOTES, 'UTF-8', false);
Questo ti protegge da xss solo se lo utilizzi correttamente significa che non lo uso in alcuni tag HTML perché ciò comporterà possibilità di attacco XSS. Ad esempio:In questo caso, è vulnerabile a xss.
fonte
2016-06-17 08:01:46
avviso molto importante. quindi qual è il tuo consiglio? come prevenire tali vulnerabilità XSS? – alex
@alex Una corretta escaping protegge dalla rottura del layout (e dall'esecuzione del javascript di hacker). Ma ci sono luoghi in cui il passaggio al contesto di javascript è legale (onclick, onerror, href) e "escaping" non possono impedirlo. È necessario convalidare e disinfettare i dati prima di inserirli in tali luoghi. Consiglio vivamente di leggere [QWASP XSS Prevention Cheat Sheet] (https://www.owasp.org/index.php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet) –
Inoltre filtro di ingresso prima della convalida come, prima di creare /app/Common/Utility.php
e utilizzare nel vostro controller come questo
Questo codice pulirà il vostro input prima della convalida
fonte
2016-12-02 07:36:57 Balachandran
Il pacchetto laravelgems/blade-escape estende Blade aggiungendo strategie di escape diverse ctives -
@text
,@attr
,@css
,@js
,@param
Esempio:
leggere i loro README. XSS è molto complicato, ci sono molti contesti e approcci.
Test pagina - http://laragems.com/package/blade-escape/test
fonte
2016-12-25 18:34:29