[RUBY-ON-RAILS] RoR에의 검증과 정규 표현식 4
RUBY-ON-RAILSRoR에의 검증과 정규 표현식 4
다음과 같은 코드가있다 :
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
그것은 작동하지만, 내가 "레이크 테스트"를 사용하여 테스트하려고 할 때이 메시지를 잡을 수 있습니다 :
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?
무슨 뜻인가요? 어떻게 그것을 해결할 수 있습니까?
해결법
-
==============================
1.^ 및 $ 라인의 시작과 라인 앵커의 끝입니다. \ A와 \ Z 동안 문자열 앵커의 영구 문자열의 시작과 끝입니다. 차이를 참조하십시오 :
^ 및 $ 라인의 시작과 라인 앵커의 끝입니다. \ A와 \ Z 동안 문자열 앵커의 영구 문자열의 시작과 끝입니다. 차이를 참조하십시오 :
string = "abcde\nzzzz" # => "abcde\nzzzz" /^abcde$/ === string # => true /\Aabcde\z/ === string # => false
레일 그래서는 "^ 당신이 사용 하시겠습니까과 $는? 마십시오 당신은 대신 \ A와 \ Z를 사용하지?"당신을 말하고있다
자세한 내용은 여기이 경고를 생성하는 레일의 보안 문제에있다.
-
==============================
2.당신의 유효성 검사 규칙은 자바 스크립트 주입에 취약하기 때문에이 경고가 발생합니다.
당신의 유효성 검사 규칙은 자바 스크립트 주입에 취약하기 때문에이 경고가 발생합니다.
. (| JPG | PNG GIF) 행의 마지막까지 $와 일치하는 경우 \합니다. 규칙이 값 pic.png의 타당성을 검증 그래서 \ nalert (1); 사실 같은 :
"test.png\n<script>alert(1)</script>" === /\.(gif|jpg|png)$/i # => true "test.png\n<script>alert(1)</script>" === /\.(gif|jpg|png)\z/i # => false
기사를 읽기 :
-
==============================
3.문제의 정규 표현식은 유증에이 아니라, 설정 / 초기화 / devise.rb에 살고있다. 변화:
문제의 정규 표현식은 유증에이 아니라, 설정 / 초기화 / devise.rb에 살고있다. 변화:
# Regex to use to validate the email address config.email_regexp = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i
에:
# Regex to use to validate the email address config.email_regexp = /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\Z/i
-
==============================
4.경고는 검증을 통과 할 것이다 당신에게 다음과 같이 그 문자열을 말하는 것입니다,하지만 당신이 원하는 아마되지 않습니다 :
경고는 검증을 통과 할 것이다 당신에게 다음과 같이 그 문자열을 말하는 것입니다,하지만 당신이 원하는 아마되지 않습니다 :
test = "image.gif\nthis is not an image" re = /\.(gif|jpg|png)$/i re.match(test) #=> #<MatchData ".gif" 1:"gif">
두 ^ 및 $는 라인이 아닌 문자열의 시작 / 끝의 시작 / 끝과 일치합니다. \ 및 A는 \ Z는 각각 시작과 전체 문자열의 끝에 대응한다.
re = /\.(gif|jpg|png)\z/i re.match(test) #=> nil
경고의 두 번째 부분은 ( "또는 추가하는 것을 잊었다 : 여러 => 진정한 옵션"참조) : 여러 옵션을 실제로 ^의 동작을 원하는 $ 경우 단순히 전달 경고를 침묵 할 수 있음을 말하고있다.
-
==============================
5.루비 대신 $ 기호 기호 \ Z를보고 싶어하는 경우, 보안을 위해, 당신은, 다음 코드는 다음과 같을 것이다 그에게 줄 필요가 :
루비 대신 $ 기호 기호 \ Z를보고 싶어하는 경우, 보안을 위해, 당신은, 다음 코드는 다음과 같을 것이다 그에게 줄 필요가 :
validates :image_url, allow_blank: true, format: {with: %r{\.(gif|jpg|png)\z}i, message: 'URL must point to GIF, JPG, PNG.'}
from https://stackoverflow.com/questions/17759735/regular-expressions-with-validations-in-ror-4 by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 액티브 / 레일의 updated_at 컬럼의 created_at 이름 바꾸기 (0) | 2020.02.14 |
---|---|
[RUBY-ON-RAILS] 유증 4.0 레일. 중첩은 Unpermited 매개 변수 속성 (0) | 2020.02.14 |
[RUBY-ON-RAILS] 응용 프로그램 / 자산의 모든 CSS와 JS 파일을 처리 할 수 config.assets.precompile 설정을 레일 (0) | 2020.02.14 |
[RUBY-ON-RAILS] 어떻게 우분투에 루비를 제거 할 수 있습니다? (0) | 2020.02.14 |
[RUBY-ON-RAILS] 억제 루비 경고 사양을 실행 (0) | 2020.02.14 |