Sha256: 47f5e9d032d4b6685e8efa16e7454b02f8c0dda1e4581b6b390220044d612234

Contents?: true

Size: 1.22 KB

Versions: 8

Compression:

Stored size: 1.22 KB

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.io/terms.html

require 'cgi'

require 'sqreen/rules_callbacks/regexp_rule'

module Sqreen
  module Rules
    # look for reflected XSS
    class ReflectedXSSCB < RegexpRuleCB
      def pre(_inst, *args, &_block)
        value = args[0]
        return if value.nil?
        # If the value is not marked as html_safe, it will be escaped later
        return unless value.html_safe?

        # Sqreen::log.debug value
        # Sqreen::log.debug params

        return unless framework.params_include?(value)

        Sqreen.log.debug { format('Found unescaped user param: %s', value) }

        return unless value.is_a?(String)

        saved_value = value.dup
        # potential XSS! let's escape
        args[0].replace(CGI.escape_html(value)) if block
        # The remaining code is only to find out if user entry was an attack,
        # and record it. Since we don't rely on it to respond to user, it would
        # be better to do it in background.
        found = match_regexp(saved_value)

        return unless found
        infos = { :found => found }
        record_event(infos)
        nil
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
sqreen-0.8.11465220943-java lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.8.11465220943 lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.8.01464630418-java lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.8.01464630418 lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.7.01464629603-java lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.7.01464629603 lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.7.01462198090-java lib/sqreen/rules_callbacks/reflected_xss.rb
sqreen-0.7.01462198090 lib/sqreen/rules_callbacks/reflected_xss.rb