Es gibt folgenden Code:
class Product < ActiveRecord::Base
validates :title, :description, :image_url, presence: true
validates :price, numericality: {greater_than_or_equal_to: 0.01}
validates :title, uniqueness: true
validates :image_url, allow_blank: true, format: {
with: %r{\.(gif|jpg|png)$}i,
message: 'URL must point to GIT/JPG/PNG pictures'
}
end
Es funktioniert, aber wenn ich versuche, es mit "Rake Test" zu testen, erhalte ich folgende Meldung:
rake aborted!
The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?
Was heißt das? Wie kann ich es reparieren?
ruby-on-rails
ruby
activerecord
Malcoauri
quelle
quelle
/\.(gif|jpg|png)$/i
? Vielleicht%r{}
fügt es$
am Ende sein eigenes hinzu .%r{\.(gif|jpg|png)$}i #=> /\.(gif|jpg|png)$/i
,%r{\.(gif|jpg|png)}i #=> /\.(gif|jpg|png)/i
.irb
Antworten:
^
und$
ist Anfang der Linie und End - of - Line Anker. Während\A
und\z
ist Permanent Anfang von String und Ende des String Ankers.Sieh den Unterschied:
So Rails ist Ihnen zu sagen : „Bist du sicher , möchten Sie verwenden
^
und$
? Willst du nicht verwenden\A
und\z
stattdessen?“Es gibt mehr Sicherheitsbedenken auf den Schienen, die diese Warnung hier generieren .
quelle
:multiline => true
Sie hinzufügen, korrigieren Sie nur die Warnung Rails, dass Sie wissen, was Sie tun.Diese Warnung wird ausgelöst, weil Ihre Validierungsregel für die Javascript-Injektion anfällig ist.
In Ihrem Fall
\.(gif|jpg|png)$
passt bis zum Ende der Zeile. Ihre Regel bestätigt diesen Wert alsopic.png\nalert(1);
als wahr:Lesen Sie die Artikel:
quelle
Das Problem regexp liegt nicht in devise, sondern in config / initializers / devise.rb. Veränderung:
zu:
quelle
Die Warnung sagt Ihnen, dass Zeichenfolgen wie die folgende die Validierung bestehen, aber wahrscheinlich nicht das, was Sie wollen:
Beides
^
und$
entspricht dem Anfang / Ende einer Zeile, nicht dem Anfang / Ende der Zeichenfolge.\A
und\z
entspricht dem Anfang bzw. dem Ende der vollständigen Zeichenfolge.Der zweite Teil der Warnung ( „oder vergessen , die hinzuzufügen: mehrzeilige => true Option“) sagt Ihnen , dass , wenn Sie tatsächlich das Verhalten wollen
^
und$
Sie einfach die Warnung vorbei der Stille können:multiline
Option.quelle
:multiline
?Wenn Ruby aus Sicherheitsgründen
\z
anstelle des$
Symbolzeichens sehen möchte , dass Sie es ihm geben müssen, sieht der Code folgendermaßen aus:quelle