rack-smack 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +11 -3
- data/anon_convert_sample.rb +7 -0
- data/lib/rack-smack.rb +3 -0
- data/lib/rack/smack.rb +11 -4
- data/lib/rack/smack/version.rb +1 -1
- data/rack-smack.gemspec +3 -3
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 82950b16399f7c3b29ace855e6e0c35ccd11912cb59e08cd4f16fa12cc6ed08a
|
4
|
+
data.tar.gz: cf203f926631582b5054a9dbe2c278c0d8beec46325161c0a4b0be1799e59e93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0055d31ead65e181c44362dcd7d86fbd512e638d9575dc1abb48796e39b7b5ad640a4dc29dfe963b7b788298288b1ab472aaac6f6dfcf5250f2c6485dd12a33b
|
7
|
+
data.tar.gz: 8aaa91913e8a1a33474e8e33bb1f4f763e847d5d1126f8aea27daecdf0be85f3fb53b45f084701cfb7e9a5cda49f71c99192d5aa2038e91ed1b4b5d20e3bd51f
|
data/README.md
CHANGED
@@ -2,21 +2,28 @@
|
|
2
2
|
|
3
3
|
A no-nonsense force of good in a world of bad. Will prevent malicious bots/users from accessing your content once they are caught red-handed.
|
4
4
|
|
5
|
-
##
|
6
|
-
|
5
|
+
## Install
|
6
|
+
```
|
7
|
+
$ gem install rack-smack
|
8
|
+
```
|
7
9
|
|
10
|
+
## Usage
|
8
11
|
```
|
12
|
+
require 'rack/smack'
|
13
|
+
|
9
14
|
use Rack::Smack
|
15
|
+
run YourApp
|
10
16
|
```
|
11
17
|
|
12
18
|
## Options
|
13
19
|
`file` for filename storing the bad guys
|
14
20
|
`list` for the list of keywords you want to ban on
|
15
21
|
`asset` for the list of keywords where you want to skip checking
|
22
|
+
`anon` do not log any client ips
|
16
23
|
|
17
24
|
### Example with options
|
18
25
|
```
|
19
|
-
use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin']
|
26
|
+
use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin'], anon: true
|
20
27
|
```
|
21
28
|
|
22
29
|
## Defaults
|
@@ -25,6 +32,7 @@ use Rack::Smack file: 'bad_guys.txt', list: ['wp', 'wordpress', php', 'admin']
|
|
25
32
|
|file|'./ban_list.txt'|
|
26
33
|
|list|['wp', 'wordpress', 'xmlrpc', 'sfn']|
|
27
34
|
|asset|['css', 'gif', 'jpg', 'jpeg', 'js', 'png', 'ico', 'txt']|
|
35
|
+
|anon|false|
|
28
36
|
|
29
37
|
## Want to understand?
|
30
38
|
[Code overview](https://alessandrominali.github.io/block_malicious_users_with_rack_app)
|
data/lib/rack-smack.rb
CHANGED
data/lib/rack/smack.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'rack/smack/version'
|
2
|
-
|
3
1
|
module Rack
|
4
2
|
# don't cross me boy
|
5
3
|
class Smack
|
@@ -12,8 +10,13 @@ module Rack
|
|
12
10
|
@asset = opts.delete(:asset) || ASSET
|
13
11
|
@blocked = opts.delete(:list) || BLOCKED
|
14
12
|
@file = opts.delete(:file) || FILENAME
|
13
|
+
@anon = opts.delete(:anon) || false
|
15
14
|
raise TypeError unless options_valid?
|
16
15
|
IO.write(FILENAME, '') unless ::File.file?(@file)
|
16
|
+
|
17
|
+
if @anon
|
18
|
+
define_singleton_method(:ip) { Digest::SHA2.hexdigest(@req.ip)[0...16] }
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def call(env)
|
@@ -27,13 +30,13 @@ module Rack
|
|
27
30
|
private
|
28
31
|
|
29
32
|
def ban!
|
30
|
-
IO.write(@file, "#{
|
33
|
+
IO.write(@file, "#{ip},#{@req.path},#{Time.now}\n", mode: 'a')
|
31
34
|
smack
|
32
35
|
end
|
33
36
|
|
34
37
|
def banned?
|
35
38
|
IO.foreach(@file) do |row|
|
36
|
-
return true if row.split(',')[0] ==
|
39
|
+
return true if row.split(',')[0] == ip
|
37
40
|
end
|
38
41
|
false
|
39
42
|
end
|
@@ -45,5 +48,9 @@ module Rack
|
|
45
48
|
def smack
|
46
49
|
[403, { 'Content-Type' => 'text/html' }, ['Banned.']]
|
47
50
|
end
|
51
|
+
|
52
|
+
def ip
|
53
|
+
@req.ip
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
data/lib/rack/smack/version.rb
CHANGED
data/rack-smack.gemspec
CHANGED
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler',
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency 'rspec',
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.15'
|
25
|
+
spec.add_development_dependency "rake", '>= 12.3.3'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
27
27
|
spec.add_development_dependency 'rack-test'
|
28
28
|
spec.add_development_dependency 'pry'
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-smack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AlessandroMinali
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
83
|
+
description:
|
84
84
|
email:
|
85
85
|
- alessandro.minali@gmail.com
|
86
86
|
executables: []
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- LICENSE.txt
|
94
94
|
- README.md
|
95
95
|
- Rakefile
|
96
|
+
- anon_convert_sample.rb
|
96
97
|
- lib/rack-smack.rb
|
97
98
|
- lib/rack/smack.rb
|
98
99
|
- lib/rack/smack/version.rb
|
@@ -101,7 +102,7 @@ homepage: https://github.com/AlessandroMinali/rack-smack
|
|
101
102
|
licenses:
|
102
103
|
- MIT
|
103
104
|
metadata: {}
|
104
|
-
post_install_message:
|
105
|
+
post_install_message:
|
105
106
|
rdoc_options: []
|
106
107
|
require_paths:
|
107
108
|
- lib
|
@@ -116,9 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
117
|
- !ruby/object:Gem::Version
|
117
118
|
version: '0'
|
118
119
|
requirements: []
|
119
|
-
|
120
|
-
|
121
|
-
signing_key:
|
120
|
+
rubygems_version: 3.1.2
|
121
|
+
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: A no-nonsense force of good in a world of bad. Will prevent malicious bots/users
|
124
124
|
from accessing your content once they are caught red-handed.
|