Esempio 3
📖 Esempio 3 - Controllo XSS¶
Questo esempio mostra come la macro {{ }} faccia l'escape di qualsiasi valore HTML, impedendo
che codice malevolo venga iniettato. Non dobbiamo preoccuparci di nulla.
La macro {!! !!} può essere usata per mostrare dati HTML grezzi.
Usiamo anche la direttiva @prg per usare funzioni Harbour che possono supportare le nostre
view.
Controller: example3.prg¶
function main()
local aData := {;
{ "Harbour", "Linguaggio open-source derivato da Clipper, focalizzato su applicazioni business e database con sintassi classica.", .T. },;
{ "PHP", "Linguaggio di scripting server-side progettato specificamente per lo sviluppo web e la creazione di applicazioni dinamiche.", .F. },;
{ "Python", "Linguaggio di alto livello con sintassi pulita e leggibile, molto usato in data science, backend e automazione.", .F. },;
{ "Rust", "Linguaggio di sistema focalizzato su sicurezza, performance e concorrenza senza bisogno di un garbage collector.", .F. },;
{ "Kotlin", "Linguaggio JVM moderno che combina programmazione funzionale e object-oriented con sintassi concissa e sicura.", .F. };
}
local hUrls := {=>}
hUrls[ 'Harbour' ] := 'https://harbour.github.io/'
hUrls[ 'PHP' ] := 'https://www.php.net/'
hUrls[ 'Python' ] := 'https://www.python.org/'
hUrls[ 'Rust' ] := 'https://rust-lang.org/es/'
hUrls[ 'Kotlin' ] := 'https://kotlinlang.org/'
return UView( 'example3.html', aData, hUrls )
View: example3.html¶
@args mydata, urls
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Esempio 3</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1 class="text-secondary">Controllo XSS</h1>
<hr>
@for n := 1 to len( myData )
<br>
@if myData[n][3]
<div class="alert alert-success" role="alert">
<b>⭐ {{ myData[n][1]}}</b><hr>
<br>
{{ myData[n][2] }}
<br>
<div class="text-end">
<a href="{!! GetUrl( myData[n][1] ) !!}" class="btn btn-outline-success btn-sm rounded-pill px-3 mt-2">
{{ GetUrl( myData[n][1] ) }}
</a>
</div>
</div>
@else
<div class="alert alert-dark" role="alert">
<b>{{ myData[n][1]}}</b><hr>
<br>
{{ myData[n][2] }}
<br>
<div class="text-end">
<a href="{!! GetUrl( myData[n][1] ) !!}" class="btn btn-outline-dark btn-sm rounded-pill px-3 mt-2">
{{ GetUrl( myData[n][1] ) }}
</a>
</div>
</div>
@endif
@next
@prg
function GetUrl( uKey )
local cUrl := HB_HGetDef( urls, uKey, '' )
return cUrl
@endprg
</div>
</body>
</html>
Risultato¶
