2016-12-14 7 views
-3

I Dokumentation über „Eval ist böse“ spricht gefunden, ich habe es hat Leistungsprobleme zu verstehen, auch MSDN sie mitteilen:Eval für Sicherheitsbedenken?

Da diese Methode Auswertung spät gebundene führt, Reflexion zur Laufzeit verwendet wird, kann es dazu führen, Leistung merklich langsam im Vergleich zu Standard ASP.NET-Datenbindungssyntax - MSDN

aus dem Leistungsproblem und unter Berücksichtigung des folgenden Code:

<%# Eval("MyDataFieldFromDataBase") %> 

Kann etwas getan werden, um zu verhindern, dass das Feld auf gefährliche Weise interpretiert wird (um Code-Injection zu verhindern)?

+0

Sie haben nicht klar gemacht, was Sie mit "hack" meinen. – mason

+0

macht das eval alles andere als den Wert von 'Foo.MyDataFieldFromDatabase' anzuzeigen. –

+0

Warum? Was versuchst du zu erreichen? – mason

Antwort

1

Ich glaube, Sie sprechen über einige verschiedene Eval, nicht ASP.NET's. Eval in Aspx ist nur ein method, es ist so schädlich wie alle anderen Methoden.

Ein mögliches Problem damit ist, dass Eval ein Objekt zurückgibt, so dass Sie eine ungültige Cast-Ausnahme erhalten können, wenn Sie diesen bestimmten Typ nicht erwartet haben. Sie haben also keine Art Sicherheit mit Eval auf der Seite.

Eine andere Sache ist, dass Eval keine Art von Flucht, also wenn Sie potentiell gefährlichen Inhalt in Ihrer DB haben, wird es so wie von Eval zurückgegeben wird. Aber das ist kein Eval-spezifisches Problem, Sie müssen nur sicherstellen, dass Sie alle Benutzereingaben bereinigen, Eval hat damit nichts zu tun.

Anders als das ASP.NET Eval ist völlig harmlos.

+0

Ja, du hast Recht Ich habe über Aspx gesprochen. Aber ich tag asp.net ich werde das korrigieren, Sie können Ihren Beitrag bearbeiten, um das zu reflektieren. Und ich habe mich geirrt und eval sind böse, gelten nicht für aspx Eval. das ist toll zu wissen. Ich hatte erwartet, etwas zu finden, das das Team zwingen würde, es nicht mehr zu benutzen, aber es ist in Ordnung. Ich werde nur ihren Code bearbeiten. –

+1

Ihr Tag sieht gut aus, Sie haben nach ASP.NET eval gefragt. ASPX ist nur der Typ der Markup-Seite, die ASPNET verwendet. Keine Notwendigkeit für retagging – Andrei

+0

Eval selbst kann nicht entkommen, aber mit ASP.NET 4.5 können Sie die '<#: Eval (" SomeField ")%>' Syntax verwenden, um jede Ausgabe zu codieren und das Einfügen von Skripten in die Client-Seite zu verhindern. – mason

Verwandte Themen