복붙노트

[RUBY-ON-RAILS] RoR에의 검증과 정규 표현식 4

RUBY-ON-RAILS

RoR에의 검증과 정규 표현식 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. ==============================

    1.^ 및 $ 라인의 시작과 라인 앵커의 끝입니다. \ A와 \ Z 동안 문자열 앵커의 영구 문자열의 시작과 끝입니다. 차이를 참조하십시오 :

    ^ 및 $ 라인의 시작과 라인 앵커의 끝입니다. \ A와 \ Z 동안 문자열 앵커의 영구 문자열의 시작과 끝입니다. 차이를 참조하십시오 :

    string = "abcde\nzzzz"
    # => "abcde\nzzzz"
    
    /^abcde$/ === string
    # => true
    
    /\Aabcde\z/ === string
    # => false
    

    레일 그래서는 "^ 당신이 사용 하시겠습니까과 $는? 마십시오 당신은 대신 \ A와 \ Z를 사용하지?"당신을 말하고있다

    자세한 내용은 여기이 경고를 생성하는 레일의 보안 문제에있다.

  2. ==============================

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

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

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

    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.'}
    
  6. from https://stackoverflow.com/questions/17759735/regular-expressions-with-validations-in-ror-4 by cc-by-sa and MIT license