Ich beginne gerade mit Rails, also benutze ich Brakeman , um mich über mögliche Sicherheitslücken in meinem Newbie-Code zu informieren. Es wird eine "Dynamic Render Path" Warnung mit hohem Vertrauen bezüglich des folgenden Codes in meiner show.js.erb
-Datei geworfen:
Ich habe eigentlich erwartet, dass dies ein Problem war, also keine Überraschung. Also habe ich es wie folgt geändert:
%Vor%Obwohl ich glaube, dass der Code jetzt sicher ist, ist Brakeman immer noch unzufrieden damit. Gibt es eine idiomatischere Möglichkeit, das Rendern eines Partials basierend auf Benutzereingaben zu steuern?
Update (05.02.2016):
Dies wurde ab Brakeman 3.0.3 behoben.
Wenn die legal_partial?
-Methode wie folgt inline ist:
Brakeman kann die Schutzbedingung erkennen und warnt nicht mehr vor dem späteren render
Aufruf.
Ursprüngliche Antwort:
Leider weiß Brakeman nicht, dass if legal_partial?
eine richtige Wache ist. Alles, was es weiß ist, dass params[:partial]
@allowed_partial
zugewiesen ist, und das dann an render
übergeben wird.
Sie können möglicherweise feststellen, dass @allowed_partial
immer ein sicherer Wert ist. An diesem Punkt müssen Sie überlegen, ob es sinnvoll ist, Komplexität hinzuzufügen, um ein Werkzeug glücklich zu machen.
Als Beispiel könnten Sie das tun:
%Vor% Es ist im Grunde dasselbe, nur dass Sie jetzt die Zuordnung von @allowed_partial
zu Brakeman ausblenden.
(Achtung: Nicht unbedingt "beste" Art, dies zu tun.)
Verwenden Sie brakeman 4.2.0
Ich hatte ein ähnliches Problem beim Versuch, eine bestimmte Vorlage mit Handposition und Namen zu rendern. Jedes Produkt meiner App benötigt diese spezifische benannte Vorlage. Der Vorlagenname stammt von den Controller-Parametern als params[:a_particular_slug].underscore
.
Ich habe das mit so etwas gelöst:
%Vor% Hier suche ich nach einer Vorlage. Wenn Sie eine partielle verwenden müssen, beachten Sie, dass lookup_context.find
third params auf true gesetzt ist, um nach Teiltönen zu suchen.
Sie finden mehr über lookup_context.find
hier
Hoffe, das hilft.
Tags und Links ruby ruby-on-rails-3 ruby-on-rails brakeman