Script tra siti ( XSS )

Mar 18 2023
Ciao, grazie per aver dedicato del tempo a leggere la scrittura - up! Lo apprezzo! Il contenuto di oggi riguarderà la comprensione di "Cross-Site Scripting ( XSS )" Il contenuto è completamente basato sulle mie esperienze e conoscenze personali, interazioni con persone incredibili nello spazio App Sec e Sviluppo software e molta lettura e codifica sicura . In questo articolo, cercherò di semplificare il contenuto nelle basi.

Ciao,

Grazie per aver dedicato del tempo a leggere la scrittura - up! Lo apprezzo!

Il contenuto di oggi riguarderà la comprensione di "Cross-Site Scripting ( XSS )"

Il contenuto è completamente basato sulle mie esperienze e conoscenze personali, interazioni con persone incredibili nello spazio App Sec e Sviluppo software e molta lettura e codifica sicura.

In questo articolo, cercherò di semplificare il contenuto nelle basi. Sono sicuro che i lettori avranno i propri pensieri e commenti, e accolgo con favore qualsiasi feedback e discussione.

Visualizzazioni/Commenti/Opinioni sono personali e non del mio passato/attuale datore di lavoro.

Impariamo insieme!

Che cos'è l'XSS?

In parole semplici, XSS è un tipo di vulnerabilità della sicurezza delle applicazioni che consente a un utente malintenzionato di inserire codice dannoso in una pagina Web.

Questo codice dannoso viene eseguito nel contesto del browser della vittima, consentendo all'attaccante di rubare la sessione della vittima e dando anche la possibilità di rubare dati.

Diversi tipi di XSS:

XSS memorizzato (persistente): in XSS memorizzato, gli script dannosi vengono salvati in un server in modo permanente. Ciò significa che l'hacker malintenzionato deve trovare una vulnerabilità all'interno del sito Web che consenta di iniettare uno script dannoso. Quando la vittima interroga le informazioni memorizzate, lo script dannoso che è stato iniettato dall'hacker viene recuperato dal server ed eseguito nel browser della vittima.

XSS riflesso: in XSS riflesso, un utente malintenzionato inserisce codice/script dannoso in un sito Web, che viene riflesso nel browser della vittima. Ciò significa che una risposta HTTP dannosa contiene esattamente gli stessi dati (non convalidati né codificati) che un'applicazione ha ricevuto in una richiesta HTTP.

Dom ( Client — Side ) XSS: In DOM XSS, un utente malintenzionato inserisce un codice/script dannoso per alterare il DOM di una pagina web del browser della vittima.

Come risolvere XSS:

Ora, ogni parametro e variabile in una pagina Web deve essere protetto.

Una comprensione: ogni parametro deve passare attraverso la convalida dell'input e la codifica dell'output (santizing) (secondo il contesto dei dati).

Elencherò vari passaggi su come eseguire la convalida/codifica dell'output:

Rete a punti

AntXssEncoder —https://learn.microsoft.com/en-us/dotnet/api/system.web.security.antixss.antixssencoder?view=netframework-4.8

Spazio dei nomi: System.Web.Security.AntiXss

Assemblaggio: System.Web.dll

Classe: AntiXSSEncoder

using System.Web.Security.AntiXss;

....
string inputStr = "<script>alert('a test xss attack script');</script>";
string encodedInput = AntiXssEncoder.HtmlEncode(inputStr, false);
....

Alcuni altri metodi importanti all'interno di AntiXssEncoder() quando si tratta di codificare secondo il contesto del valore, non entrerò molto nei loro dettagli, ma ne elencherò un paio qui -

CssEncode() — Codifica la stringa specificata per l'utilizzo nei fogli di stile a cascata (CSS)

using System.Web.Security.AntiXss;
...
string inputCss = "inside a css attribute value: url('" + "https://example.com?param=" + "value" + "')";
string encodedInput = AntiXssEncoder.CssEncode(inputCss);
...

...
using System.Web.Security.AntiXss;
string input = "Inside an HTML attribute: href=\"" + "https://example.com?param=" + "value" + "\"";
string encodedInput = AntiXssEncoder.HtmlAttributeEncode(input);
...

Utilizza l'encoder di ESAPI ()

Collegamento :https://www.javadoc.io/doc/org.owasp.esapi/esapi/latest/org/owasp/esapi/Encoder.html

import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;
...
String input = "<script>alert('XSS');</script>";
Encoder encoder = ESAPI.encoder();
String encodedInput = encoder.encodeForHTML(input);
...

encoderForHTMLAttribute() — Codifica i dati per l'utilizzo negli attributi HTML.

encoderForJavaScript() — Codifica i dati per l'inserimento all'interno di un valore di dati o di un argomento di funzione in JavaScript

encoderForXMLAttribute() — Codifica i dati per l'utilizzo in un attributo XML

Codifica dell'output in Javascript

Non usare mai innerHTML. innerHTML è una proprietà di DOM e viene utilizzato per impostare o recuperare il contenuto HTML da un elemento. innerHTML è pericoloso perché rende il contenuto come puro html stesso e non come testo.

Invece di innerHTML, utilizza textContent()

<!DOCTYPE html>
<html>
  <head>
    <title>textContentExample</title>
  </head>
  <body>
    <div id="exampleTextContent"></div>
    <script>
      // Assume this user input comes from an untrusted source, like a form
      const userInput = '<script>alert("XSS attack!");</script>'
      const div = document.querySelector("exampleTextContent");
      div.textContent = userInput;
    </script>
  </body>
</html>

JSTL (*.jsp): in JSTL, è possibile utilizzare il tag <c:out> per sfuggire all'output e prevenire XSS.

<c:out value="${userInput}" />

Nel mio prossimo post, parlerò di Path Traversal.

Commenti/feedback sono sempre i benvenuti poiché cerco sempre di migliorare il contenuto e di essere migliore.

Testo della fonte: la mia esperienza in App Sec, parafrasando il contenuto di più siti Web online, strumenti Open AI, DALL-E, Developer e NLP.

Grazie!

Aggiungimi su LinkedIn