1
0

More than 3 years have passed since last update.

CookieにSameSite属性がセットされていた時の標準エラーをとりあえず回避した話

Last updated at Posted at 2019-11-15

GoogleDriveが数日前よりCookieにSameSite属性(None)をセットするようになった。
Rubyの標準ライブラリであるWebAgent::CookieManagerはSameSite属性に対応していない。
また、未知の属性がCookieにセットされていた場合は、標準エラーを吐く。
従って、Cronでスクリプトを起動していると、標準エラー発生を通知するメールが、毎時届くようになってしまった。

と、多分、このようなことが起きていたのだと思う。

メールがウザすぎるので、parseメソッドだけオーバーライドしてみた。
標準エラーでなく例外を吐いてくれたら、こんなことせずに済むのだけれど、多分、深い理由があるのでしょうね。

core_ext.rb
class WebAgent
  class Cookie
    def parse(str, url)
      @url = url
      cookie_elem = str.split(/;/)
      cookie_elem = join_quotedstr(cookie_elem, ';')
      cookie_elem -= [""] 
      first_elem = cookie_elem.shift
      if first_elem !~ /([^=]*)(\=(.*))?/
        return
      end
      @name = $1.strip
      @value = normalize_cookie_value($3)
      cookie_elem.each{|pair|
        key, value = pair.split(/=/, 2) 
        key.strip!
        value = normalize_cookie_value(value)
        case key.downcase
        when 'domain'
          @domain = value
        when 'expires'
          @expires = nil
          begin
            @expires = Time.parse(value).gmtime if value
          rescue ArgumentError
          end
        when 'path'
          @path = value
        when 'secure'
          @secure = true
        when 'httponly'
          @http_only = true
        when 'samesite' # samesite属性
          @samesite = true 
        else
          warn("Unknown key: #{key} = #{value}")
        end
      }
    end
  end
end
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0