Rails Brakeman Warnung: Dynamischer Renderpfad falscher Alarm?

9

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:

%Vor%

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?

    
George Armhold 29.06.2012, 14:48
quelle

2 Antworten

7

Update (05.02.2016):

Dies wurde ab Brakeman 3.0.3 behoben.

Wenn die legal_partial? -Methode wie folgt inline ist:

%Vor%

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.)

    
Justin 29.06.2012 19:27
quelle
0

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.

    
microspino 14.03.2018 13:47
quelle