[RUBY] Ich möchte eine andere Desinfektionsmethode als Ansicht verwenden.

Wir haben eine Sicherheitsdiagnose für die derzeit in Entwicklung befindliche App durchgeführt, jedoch eine Sicherheitsanfälligkeit namens XSS (Cross-Site Scripting) festgestellt und beschlossen, diese zu beheben. Es scheint für einen Webentwickler zu offensichtlich zu sein, aber es war das erste Mal, dass ich mich damit befasste, also war es ziemlich schwierig. Ich hatte einige Stolpersteine, also schreibe ich diesmal einen davon.

Was Sie erreichen wollen

https://qiita.com/kamohicokamo/items/571c58f2d6738a7dfe6a In Bezug auf diesen Artikel möchte ich die Daten für XSS-Gegenmaßnahmen bereinigen.

Beispiel:

haml:name.html.haml


'Yamada Taro<script>alert("Yamada Taroです")</script>'

Wenn Sie es so anzeigen, wie es ist, スクリーンショット 2020-10-12 1.19.46.png

Das eingebettete JavaScript wird ausgeführt. Das ist schlecht für die Sicherheit.

= sanitize 'Yamada Taro<script>alert("Yamada Taroです")</script>'

Mit diesem "Desinfizieren",

スクリーンショット 2020-10-12 1.19.28.png

Auf diese Weise wird das Skript-Tag entfernt und es wird nur Text.

jedoch

Sie können sich die Mühe machen, "sanitize" in View zu schreiben, aber ich möchte es deaktivieren, wenn eine Zeichenfolge mit HTML-Tags eingegeben wird.

Da es sich bei dieser "Desinfektions" -Methode jedoch um eine Hilfsmethode handelt, ist die Verwendung mit Ausnahme von ...

Methode

Ich habe eine Methode wie diese gemacht.

model


def remove_script_tag(str)
  ActionController::Base.helpers.sanitize(str)
end

Wenn Sie diese Methode gut mit "before_validation" oder "before_save" verwenden, sollten Sie in der Lage sein, ungültig zu machen, selbst wenn ein bösartiges Skript als Zeichenfolge gesendet wird.

Umgebung

ruby 2.6.6 rails 6.0.3.2

Recommended Posts

Ich möchte eine andere Desinfektionsmethode als Ansicht verwenden.
Wenn Sie die Methode außerhalb verwenden möchten
Ich möchte die Hauptmethode mit Reflektion aufrufen
[Grober Kommentar] Ich möchte die Zupfmethode heiraten
Verwendung der link_to-Methode
Verwendung der include? -Methode
Verwendung der Methode form_with
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich habe versucht, die Methode zu erklären
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
[Schienen] Verwendung der Kartenmethode
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
[Java] Verwendung der toString () -Methode
Ich wollte der Methode @VisibleForTesting hinzufügen
Ich war süchtig nach der Rollmethode
Ich möchte @Autowired in Servlet verwenden
Ich möchte JSP in Emacs einfacher als die Standardeinstellung schreiben.
Verwenden Sie die Permutationsmethode, damit alle Standardbenutzer aufeinander folgen
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte den Inhalt der Absicht var_dump
Ausgabe der Verwendung der Slice-Methode
Verwendung der replace () -Methode (Java Silver)
Ich möchte nach dem Dezimalpunkt abschneiden
Ich möchte den Wert in Ruby erhalten
[Ruby-Grundlagen] Verwendung der Slice-Methode
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
[Eclipse] Ich möchte die Abschlussfunktion verwenden, aber ich möchte es schaffen, den Abschluss mit einem Leerzeichen zu bestätigen
Ich möchte Combine auch in UIKit verwenden.
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte eine Methode einer anderen Klasse aufrufen
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte NetBeans auf einem Mac verwenden → Ich kann es verwenden!
Ich möchte eine TraceId in das Protokoll einbetten
Pointcut-Ausdruck Ich möchte mehr als einen angeben
Ich möchte auch in Laradock Fischschalen verwenden! !!
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte den Dunkelmodus mit der SWT-App verwenden
[Android Studio] Ich möchte eine Maven-Bibliothek unter Android verwenden
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte die Protokollausgabe unter Android vereinfachen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
Verwendung der Getter / Setter-Methode (in Objektorientierung)
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
(´-`) .. oO (Ich möchte die Standardausgabe" Hallo "leicht finden.