2009-07-22 12 views

risposta

5
  1. Come sempre, assicuratevi di corretta uscita codificare - avviso che io sono qui dicendo codificare e non HtmlEncode. Se stai inviando il contenuto di in HTML, allora vuoi utilizzare utilizzando Html.Encode - tuttavia se stai inviando a JavaScript, allora vuoi utilizzare una funzione di codifica JavaScript . - Questo ti aiuterà contro Cross Site Scripting (XSS)
  2. Utilizza gli helper che aiutano contro gli attacchi CSRF dove necessario (o forse solo dappertutto)
  3. In base a come accedi all'archivio dati, se si tratta di un database SQL, ricordati di proteggersi contro le iniezioni SQL, tramite query parametrizzate, stored procedure, LINQ o altro.
  4. Quando esegui il test, assicurati che i dati del test contengano un output dubbia (roba in cui un codice Html.Encode non si rivela facilmente, forse attraverso lo <script type="text/javascript">alert("XSS attack!");</script>XSS here!, lo stesso vale per materiale iniettato in JavaScript, mostrare errori!)
  5. Quando il bind del modello utilizza un approccio di whitelisting per le proprietà, gli utenti non possono fare in modo che il raccoglitore leghi proprietà che non sono destinate ad essere associate!
+1

Mi piace l'articolo 4. Non penso che ci sia abbastanza gente che si affida ai tester per fare questo tipo di test. – griegs

+0

Heh anche a me, stranamente questo è il genere di cose che mi sono venute in mente quando ho dovuto pensare a quale consiglio darei ad altri - Ora posso vedere che ho bisogno di fare un po 'di riflessione su alcuni di questi .. – kastermester

+0

Sì, sto guardando tutti questi commenti pensando che ho bisogno di fare esattamente la stessa cosa. :) – griegs

1

I kinda fare quanto segue;

  1. Separare le mie preoccupazioni. Admin in cartella admin ecc
  2. [Autorizza] su tutte le azioni che richiedono di effettuare il login.
  3. Html.Encode tutti i campi di immissione dati.
  4. ActionResult Create ([Bind (prefix = "", Escludi = "id")] MyModel newModelObject) < == escludono id che possono essere utilizzati in un attacco

Oltre a questo ...

1

Il sotto sono misure generali ASP.NET

  1. Set Debug = false in web.config
  2. Accendere errore personalizzato
  3. Crittografare i cookie
  4. convalidare tutti gli ingressi
  5. Abilita convalida della richiesta
  6. Codifica l'output
1

Non utilizzare il valore predefinito GET sulle azioni a meno che non sia assolutamente necessario.Ad esempio, se si dispone di un'azione DeleteUser che non dispone di un [AcceptVerbs(HttpVerbs.Post)] su di esso, può essere chiamato tramite

<img src="http://yoursite/admin/DeleteUser/1" /> 

Quale andranno chiamati da chiunque "viste" l'immagine.

+0

IMO Se un hacker può iniettare un tag img in una pagina, potrebbe non essere difficile per lui iniettare JS che invierà un messaggio all'URL di eliminazione. Cosa ne pensi? – Ramesh

+0

Sì, è per questo che segui il consiglio di @ griegs e anche le cose sensibili [Autorizza] :). [Authorize] da solo non funzionerà, dal momento che un utente può accedere (alla maggior parte delle app) senza visualizzare la pagina. – swilliams

+0

Hmm, ho capito, esponendo GET Request può portare a cross-domain XSRF attraverso il dominio. – Ramesh

Problemi correlati