intrusion 0.1.3 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5f7c0b79c12c817d564e55ecba6f86540a09bb083ac97b5ad7b8e3a31c07fa53
4
+ data.tar.gz: 876156a63816e18184eb72af76f3634e80a15542d6d66e39d26fdaf2176b2860
5
+ SHA512:
6
+ metadata.gz: 702186b662da7e7db61cfc65264f3fab1e833d32743add8afe39675a567b58a0c4afd85c7ad0d91f3a1eae35b371e7160f4a315bbbd1140591f168e03537fd19
7
+ data.tar.gz: 13adcc68d21d57813d5d2771239d03b61fcedf31c434a91e378de2253972ef66377d1166f55e81f788cca779622edd58c8a64f3e44a0568780665d48066e1f42
@@ -1,59 +1,54 @@
1
- module Intrusion
2
-
3
- # check if ip is blocked
4
- def ids_is_blocked?(ip)
5
- ids_load.each { |d| return true if d[:ip] == ip and d[:counter] > 9 }
6
- return false
7
- end
8
-
9
- # report suspicious activity
10
- def ids_report!(ip, block=false)
11
- dt = ids_load
12
-
13
- found = nil
14
- dt.each { |d| found = d if d[:ip] == ip }
15
-
16
- if found
17
- if block
18
- found[:counter] = 10
19
- else
20
- found[:counter] += 1
21
- end
22
- else
23
- new = { :ip => ip, :counter => 1 }
24
- dt << new
25
- end
26
-
27
- # update
28
- self.ids = dt.to_yaml
29
- return self.save
30
- end
31
-
32
- # reset counter and stay
33
- def ids_unblock!(ip)
34
- dt = ids_load
35
- found = false
36
- dt.each { |d|
37
- if d[:ip] == ip
38
- d[:counter] = 0
39
- found = true
40
- end
41
- }
42
-
43
- if found
44
- # update
45
- self.ids = dt.to_yaml
46
- return self.save
47
- end
48
- return false
49
- end
50
-
51
- # convert yaml string helper
52
- def ids_load
53
- dt = []
54
- dt = YAML::load(ids) if ids
55
- return dt
56
- end
57
-
58
-
59
- end
1
+ # Intrusion main module
2
+ module Intrusion
3
+ # check if ip is blocked
4
+ def ids_is_blocked?(address)
5
+ ids_load.each do |d|
6
+ return true if d[:ip] == address && d[:counter] > 9
7
+ end
8
+ false
9
+ end
10
+
11
+ # return block counter of address
12
+ def ids_counter(address)
13
+ ids_load.each { |d| return d[:counter] if d[:ip] == address }
14
+ 0
15
+ end
16
+
17
+ # report suspicious activity
18
+ def ids_report!(address, block = false)
19
+ dt = ids_load
20
+ found = nil
21
+ dt.each { |d| found = d if d[:ip] == address }
22
+ if found
23
+ block ? found[:counter] = 10 : found[:counter] += 1
24
+ else
25
+ dt << { ip: address, counter: block ? 10 : 1 }
26
+ end
27
+
28
+ # update record
29
+ update(ids: dt.to_yaml)
30
+ end
31
+
32
+ # reset counter and stay
33
+ def ids_unblock!(address)
34
+ dt = ids_load
35
+ found = false
36
+ dt.each { |d| found = d if d[:ip] == address }
37
+
38
+ if found
39
+ dt.delete(found)
40
+ # update
41
+ return update(ids: dt.to_yaml)
42
+ end
43
+ false
44
+ end
45
+
46
+ # convert yaml string helper
47
+ def ids_load
48
+ data = ids.blank? ? [] : YAML.safe_load(ids, [Symbol])
49
+ raise 'invalid data in ids field' unless data.is_a?(Array)
50
+ data
51
+ rescue RuntimeError
52
+ []
53
+ end
54
+ end
metadata CHANGED
@@ -1,95 +1,43 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: intrusion
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.8
10
5
  platform: ruby
11
- authors:
12
- - Simon Wepfer
13
- autorequire:
6
+ authors:
7
+ - Simon Duncombe
8
+ autorequire:
14
9
  bindir: bin
15
- cert_chain:
16
- - |
17
- -----BEGIN CERTIFICATE-----
18
- MIIDKjCCAhKgAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQDDAJzdzEY
19
- MBYGCgmSJomT8ixkARkWCG5ldHNlbnNlMRIwEAYKCZImiZPyLGQBGRYCY2gwHhcN
20
- MTAxMjMwMDEzMjIzWhcNMTExMjMwMDEzMjIzWjA7MQswCQYDVQQDDAJzdzEYMBYG
21
- CgmSJomT8ixkARkWCG5ldHNlbnNlMRIwEAYKCZImiZPyLGQBGRYCY2gwggEiMA0G
22
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQcaHghb4NyoI5/ktDVocH6/T6vIhB
23
- rpxGCid4Ufk0nNJp2EQxzzJD2wpv+hmfndtH1yfA89RqIIBdHXhu/pY3Rs+7Rbuh
24
- KAhMF3Bt0MvYa2cCMOV0WQaS1TF+xu1Ko5JGNIP2YHpcusXdjUflYn/enb1xiyJ0
25
- tGe7au6H+gl55k+sy55KpSqije1sCRGsq001HEOgHMk99FWPglma1LSlHzHunCvr
26
- E0yjmEYQnA0Bz1fK23IPXpg1/JDCicz1JlOx1LQ6EXp/DsJhYvrltqMs0d8pThLz
27
- TK8zp88ciB3Je7ZV9gzCSRZn6eg7YAq3L6OGyCjXVDPeGutZ5A0+uNe5AgMBAAGj
28
- OTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFNPOntwPYyIrXaEbpJDbJT3Td9ABMAsG
29
- A1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAyKFvBXfbt8Rn/NjT5tObn9gF
30
- XE6YMpQvKFqgtjJsuWyldjpjnbg86YsEnOEW2AtRKjQJvTtuyBvf+jiGpj4TFv2u
31
- Z8lCtkHH7lOlotiqnrBpDn+4OGwHmRupmNbvs5JyWyCohFVEbTBcWuvVW+P7OM9E
32
- eaEOpD9PVJds+gguxxsdaAHafRvcOdVqQ9qpeTrofTwCttMEe6XvBF+HSTZ3IrXK
33
- ljm7jluHlbP28ywmLBUdz8bNLkoLrD77bYW5c8TqqhtgoaBXtG73y8V6WogvVV45
34
- jCYr7DaTo4rUhQrgDmq/JUQYZmAaf73WG6iwQ2Nr68hWCjVTj/wvKLKurgjqkQ==
35
- -----END CERTIFICATE-----
36
-
37
- date: 2010-12-30 00:00:00 +01:00
38
- default_executable:
10
+ cert_chain: []
11
+ date: 2020-10-08 00:00:00.000000000 Z
39
12
  dependencies: []
40
-
41
- description: intrusion detection and prevention for rails apps
42
- email: sw@netsense.ch
13
+ description: Intrusion is a gem helping you to block objects for IP addresses within
14
+ your Ruby on Rails Application.
15
+ email: sd@netsense.ch
43
16
  executables: []
44
-
45
17
  extensions: []
46
-
47
- extra_rdoc_files:
48
- - README.rdoc
18
+ extra_rdoc_files: []
19
+ files:
49
20
  - lib/intrusion.rb
50
- files:
51
- - Manifest
52
- - README.rdoc
53
- - Rakefile
54
- - lib/intrusion.rb
55
- - intrusion.gemspec
56
- has_rdoc: true
57
- homepage: http://spectify.com
21
+ homepage: http://github.com/symontech/intrusion
58
22
  licenses: []
59
-
60
- post_install_message:
61
- rdoc_options:
62
- - --line-numbers
63
- - --inline-source
64
- - --title
65
- - Intrusion
66
- - --main
67
- - README.rdoc
68
- require_paths:
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
69
27
  - lib
70
- required_ruby_version: !ruby/object:Gem::Requirement
71
- none: false
72
- requirements:
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
73
30
  - - ">="
74
- - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
- version: "0"
78
- required_rubygems_version: !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
81
35
  - - ">="
82
- - !ruby/object:Gem::Version
83
- segments:
84
- - 1
85
- - 2
86
- version: "1.2"
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
87
38
  requirements: []
88
-
89
- rubyforge_project: intrusion
90
- rubygems_version: 1.3.7
91
- signing_key:
92
- specification_version: 3
93
- summary: intrusion detection and prevention for rails apps
39
+ rubygems_version: 3.0.8
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: intrusion detection and prevention for rails applications
94
43
  test_files: []
95
-
data.tar.gz.sig DELETED
Binary file
data/Manifest DELETED
@@ -1,4 +0,0 @@
1
- Manifest
2
- README.rdoc
3
- Rakefile
4
- lib/intrusion.rb
@@ -1,55 +0,0 @@
1
- = Intrusion
2
-
3
- Intrusion is a gem helping you to detect and prevent intrusion attempts within your ruby on rails application.
4
-
5
- == Installation
6
- Install the gem:
7
- gem install intrusion
8
-
9
- Rails 3: include intrusion in your Gemfile
10
- gem 'intrusion'
11
-
12
- Rails 2: include the gem in config/environment.rb
13
- config.gem "intrusion"
14
-
15
- create a 'ids' attribute for the ActiveRecord model you want to protect and migrate, e.g:
16
-
17
- # rails generate migration add_ids_to_accounts ids:string
18
- # rake db:migrate
19
-
20
- include Intrusion in your model:
21
-
22
- class Account < ActiveRecord::Base
23
- include Intrusion
24
- end
25
-
26
- == Examples:
27
-
28
- === Check if IP adress is blocked
29
- return "your ip is blocked" if Account.find(1).ids_is_blocked?(request.remote_addr)
30
-
31
-
32
- === Report suspicious activity
33
- The internal counter will be increased. If you do this 10 times, blocking will be enabled
34
-
35
- Account.find(1).ids_report!(request.remote_addr)
36
-
37
- === Instantly block ip
38
- Account.find(1).ids_report!(request.remote_addr, true)
39
-
40
- === Reset
41
- This resets the counter to 0:
42
- Account.find(1).ids_unblock!(request.remote_addr)
43
-
44
-
45
- === Blocking objects with keywords
46
- You are not limited to IP adresses. You may block the object itself using any keyword:
47
- Account.find(1).ids_report!('self')
48
-
49
-
50
- == Hint
51
- Try http://spectify.com to scan your servers and applications for vulnerabilities - for free!
52
-
53
- == Copyright
54
-
55
- (c) 2010 -2011 netsense LLC - managed security audits - http://netsense.ch
data/Rakefile DELETED
@@ -1,14 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'echoe'
4
-
5
- Echoe.new('intrusion', '0.1.3') do |p|
6
- p.description = "intrusion detection and prevention for rails apps"
7
- p.url = "http://spectify.com"
8
- p.author = "Simon Wepfer"
9
- p.email = "sw@netsense.ch"
10
- p.ignore_pattern = ["tmp/*", "script/*"]
11
- p.development_dependencies = []
12
- end
13
-
14
- Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
@@ -1,32 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{intrusion}
5
- s.version = "0.1.3"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Simon Wepfer"]
9
- s.cert_chain = ["/home/sw/gem-public_cert.pem"]
10
- s.date = %q{2010-12-30}
11
- s.description = %q{intrusion detection and prevention for rails apps}
12
- s.email = %q{sw@netsense.ch}
13
- s.extra_rdoc_files = ["README.rdoc", "lib/intrusion.rb"]
14
- s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/intrusion.rb", "intrusion.gemspec"]
15
- s.homepage = %q{http://spectify.com}
16
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Intrusion", "--main", "README.rdoc"]
17
- s.require_paths = ["lib"]
18
- s.rubyforge_project = %q{intrusion}
19
- s.rubygems_version = %q{1.3.7}
20
- s.signing_key = %q{/home/sw/gem-private_key.pem}
21
- s.summary = %q{intrusion detection and prevention for rails apps}
22
-
23
- if s.respond_to? :specification_version then
24
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
- s.specification_version = 3
26
-
27
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
- else
29
- end
30
- else
31
- end
32
- end
metadata.gz.sig DELETED
Binary file