Express und ejs

Lesezeit: 1 Minute

Benutzer-Avatar
huckepack

In meiner index.ejs habe ich diesen Code:

var current_user = <%= user %>

In meinem Knoten habe ich

app.get("https://stackoverflow.com/", function(req, res){
    res.locals.user = req.user
    res.render("index")
})

Jedoch auf der Seite erhalte ich

var current_user = [object Object]

und wenn ich schreibe

var current_user = <%= JSON.stringify(user) %>

Ich erhalte:

var current_user = {&quot;__v&quot;:0,&quot;_id&quot;:&quot;50bc01938f164ee80b000001&quot;,&quot;agents&quot;:...

Gibt es eine Möglichkeit, ein JSON zu übergeben, das sein wird JS-lesbar?

Benutzer-Avatar
huckepack

Oh, das war einfach, nicht verwenden <%=verwenden <%- stattdessen. Zum Beispiel:

 <%- JSON.stringify(user) %>

Der erste rendert in HTML, der zweite rendert Variablen (wie sie sind, eval)

  • Richtige Antwort, aber nur zu präzise, ​​es ist <%-JSON.stringify(user)%>, das die Magie wiedergibt.

    – Pierre Maoui

    31. Januar 2014 um 11:29 Uhr

  • Wird die eval-Funktion tatsächlich verwendet, oder implizieren Sie, dass die Ergebnisse ähnlich sind, wenn eval aufgerufen wurde. Ich bin neugierig, denn wie wir alle wissen, ist eval…

    – NikolausFolk

    2. Mai 2015 um 22:30 Uhr

  • Ok, aus Neugier habe ich mich damit befasst und festgestellt, dass es tatsächlich eval() verwendet. Ich sollte auch hinzufügen, dass ich weiß, dass es ein oft nachgeplappertes Sprichwort ist und eval nicht unbedingt böse ist, sondern nur leicht missbraucht wird. Musste das erwähnen, bevor ich einige Wut unter den Massen hervorrief.

    – NikolausFolk

    2. Mai 2015 um 22:33 Uhr

Benutzer-Avatar
Benutzer732456

Aufmerksamkeit!

Wenn der Benutzer über API-Aufrufe erstellt werden kann, würde <%- Sie mit einer ernsthaften XSS-Schwachstelle belasten. Mögliche Lösungen finden Sie hier:

Übergeben Sie Variablen an JavaScript in ExpressJS

Wenn wie ich Ihr Objekt ein entkommenes Zeichen wie enthalten kann / oder " Verwenden Sie dann diese robustere Lösung

var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>

Dies funktioniert jetzt in der neuesten Version von Express

1019290cookie-checkExpress und ejs

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy