Skip to content

Commit 41e8851

Browse files
committed
Feature/add sanitize to prevent xss
1 parent 9300c67 commit 41e8851

18 files changed

+95
-16
lines changed

.env-example

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SANITIZED_ALLOWED_TAGS="strong em ul ol li"
2+
SANITIZED_ALLOWED_ATTRIBUTES="style"

Gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ gem 'mime-types', '~> 3.3'
1414

1515
gem 'carrierwave', '~> 2.1.1'
1616
gem 'carrierwave-base64', '~> 2.8.0'
17-
gem 'dotenv-rails', groups: [:development, :test]
17+
gem 'dotenv-rails'
1818

1919
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
2020
# gem 'jbuilder', '~> 2.5'

app/controllers/answers_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def create
2525
@answer = Answer.new(answer_params)
2626

2727
if @answer.save
28-
render json: serialize(@answer), status: :created
28+
render json: serialize(@answer.reload), status: :created
2929
else
3030
render json: @answer.errors, status: :unprocessable_entity
3131
end
@@ -34,7 +34,7 @@ def create
3434
# PATCH/PUT /answers/1
3535
def update
3636
if @answer.update(answer_params)
37-
render json: serialize(@answer)
37+
render json: serialize(@answer.reload)
3838
else
3939
render json: @answer.errors, status: :unprocessable_entity
4040
end

app/controllers/comments_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def create
2727
@comment = Comment.new(comment_params)
2828

2929
if @comment.save
30-
render json: serialize(@comment), status: :created
30+
render json: serialize(@comment.reload), status: :created
3131
else
3232
render json: @comment.errors, status: :unprocessable_entity
3333
end
@@ -36,7 +36,7 @@ def create
3636
# PATCH/PUT /comments/1
3737
def update
3838
if @comment.update(comment_params)
39-
render json: serialize(@comment)
39+
render json: serialize(@comment.reload)
4040
else
4141
render json: @comment.errors, status: :unprocessable_entity
4242
end

app/controllers/evaluations_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def create
2525
@evaluation = Evaluation.new(evaluation_params)
2626

2727
if @evaluation.save
28-
render json: serialize(@evaluation), status: :created
28+
render json: serialize(@evaluation.reload), status: :created
2929
else
3030
render json: @evaluation.errors, status: :unprocessable_entity
3131
end
@@ -36,7 +36,7 @@ def update
3636
if @evaluation.update(evaluation_params)
3737
@evaluation.global_status = 0 if @evaluation.status == 1 && evaluation_params["global_status"].blank?
3838
@evaluation.save
39-
render json: serialize(@evaluation)
39+
render json: serialize(@evaluation.reload)
4040
else
4141
render json: @evaluation.errors, status: :unprocessable_entity
4242
end

app/controllers/knowledge_bases_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def index
1111

1212
def create
1313
knowledge_base = KnowledgeBase.create(knowledge_base_params)
14-
render json: serialize(knowledge_base)
14+
render json: serialize(knowledge_base.reload)
1515
end
1616

1717
def show
@@ -20,7 +20,7 @@ def show
2020

2121
def update
2222
@knowledge_base.update(knowledge_base_params)
23-
render json: serialize(@knowledge_base)
23+
render json: serialize(@knowledge_base.reload)
2424
end
2525

2626
def destroy

app/controllers/knowledges_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def create
1616
knowledge = Knowledge.new(data)
1717
knowledge.knowledge_base = @knowledge_base
1818
knowledge.save
19-
render json: serialize(knowledge)
19+
render json: serialize(knowledge.reload)
2020
end
2121

2222
def show
@@ -27,7 +27,7 @@ def update
2727
data = knowledge_params
2828
data["items"] = JSON.parse(data["items"]) if data["items"]
2929
@knowledge.update(data)
30-
render json: serialize(@knowledge)
30+
render json: serialize(@knowledge.reload)
3131
end
3232

3333
def destroy

app/controllers/measures_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def create
2525
@measure = Measure.new(measure_params)
2626

2727
if @measure.save
28-
render json: serialize(@measure), status: :created
28+
render json: serialize(@measure.reload), status: :created
2929
else
3030
render json: @measure.errors, status: :unprocessable_entity
3131
end
@@ -34,7 +34,7 @@ def create
3434
# PATCH/PUT /measures/1
3535
def update
3636
if @measure.update(measure_params)
37-
render json: serialize(@measure)
37+
render json: serialize(@measure.reload)
3838
else
3939
render json: @measure.errors, status: :unprocessable_entity
4040
end

app/controllers/structures_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def create
2222
@structure = Structure.new(structures_parameters)
2323

2424
if @structure.save
25-
render json: serialize(@structure), status: :created
25+
render json: serialize(@structure.reload), status: :created
2626
else
2727
render json: @structure.errors, status: :unprocessable_entity
2828
end
@@ -34,7 +34,7 @@ def update
3434
structures_parameters[:data] = JSON.parse(structures_parameters[:data]) if structures_parameters[:data]
3535

3636
if @structure.update(structures_parameters)
37-
render json: serialize(@structure)
37+
render json: serialize(@structure.reload)
3838
else
3939
render json: @structure.errors, status: :unprocessable_entity
4040
end

app/models/answer.rb

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
class Answer < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
belongs_to :pia, inverse_of: :answers
34
validates :reference_to, presence: true
5+
after_initialize :overwrite_to_safety_values
6+
7+
private
8+
9+
def overwrite_to_safety_values
10+
self.data['text'] = sanitize self.data['text']
11+
end
412
end

app/models/comment.rb

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
class Comment < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
belongs_to :pia, inverse_of: :comments
34
validates :reference_to, presence: true
5+
after_initialize :overwrite_to_safety_values
6+
7+
private
8+
9+
def overwrite_to_safety_values
10+
self.description = sanitize read_attribute(:description)
11+
end
412
end

app/models/evaluation.rb

+9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
class Evaluation < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
belongs_to :pia, inverse_of: :evaluations
34
validates :reference_to, presence: true
5+
after_initialize :overwrite_to_safety_values
6+
7+
private
8+
9+
def overwrite_to_safety_values
10+
self.action_plan_comment = sanitize read_attribute(:action_plan_comment)
11+
self.evaluation_comment = sanitize read_attribute(:evaluation_comment)
12+
end
413
end

app/models/knowledge.rb

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
class Knowledge < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
belongs_to :knowledge_base
3-
44
validates :name, presence: true
55
validates :knowledge_base, presence: true
6+
after_initialize :overwrite_to_safety_values
7+
8+
private
9+
10+
def overwrite_to_safety_values
11+
self.name = sanitize read_attribute(:name)
12+
end
613
end

app/models/knowledge_base.rb

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
class KnowledgeBase < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
validates :name, presence: true
34
validates :author, presence: true
45
validates :contributors, presence: true
56
has_many :knowledges, dependent: :destroy
7+
after_initialize :overwrite_to_safety_values
8+
9+
private
10+
11+
def overwrite_to_safety_values
12+
self.name = sanitize read_attribute(:name)
13+
self.author = sanitize read_attribute(:author)
14+
self.contributors = sanitize read_attribute(:contributors)
15+
end
616
end

app/models/measure.rb

+10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
class Measure < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
belongs_to :pia, inverse_of: :measures
4+
after_initialize :overwrite_to_safety_values
5+
6+
private
7+
8+
def overwrite_to_safety_values
9+
self.title = sanitize read_attribute(:title)
10+
self.content = sanitize read_attribute(:content)
11+
self.placeholder = sanitize read_attribute(:placeholder)
12+
end
313
end

app/models/pia.rb

+11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class Pia < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
has_many :answers, inverse_of: :pia, dependent: :destroy
34
has_many :comments, inverse_of: :pia, dependent: :destroy
45
has_many :evaluations, inverse_of: :pia, dependent: :destroy
@@ -8,6 +9,8 @@ class Pia < ApplicationRecord
89
belongs_to :structure, optional: true
910
validates :name, presence: true
1011

12+
after_initialize :overwrite_to_safety_values
13+
1114
def self.import(json_string)
1215
json = JSON.parse(json_string)
1316
json.each do |pia_in|
@@ -60,4 +63,12 @@ def duplicate_self
6063
end
6164
end
6265
end
66+
67+
def overwrite_to_safety_values
68+
self.name = sanitize read_attribute(:name)
69+
self.author_name = sanitize read_attribute(:author_name)
70+
self.evaluator_name = sanitize read_attribute(:evaluator_name)
71+
self.validator_name = sanitize read_attribute(:validator_name)
72+
self.category = sanitize read_attribute(:category)
73+
end
6374
end

app/models/structure.rb

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
class Structure < ApplicationRecord
2+
include ActionView::Helpers::SanitizeHelper
23
has_many :pias, dependent: :nullify
4+
after_initialize :overwrite_to_safety_values
5+
6+
private
7+
8+
def overwrite_to_safety_values
9+
self.name = sanitize read_attribute(:name)
10+
self.sector_name = sanitize read_attribute(:sector_name)
11+
end
312
end

config/application.rb

+5
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,10 @@ class Application < Rails::Application
3131
# Middleware like session, flash, cookies can be added back manually.
3232
# Skip views, helpers and assets when generating a new resource.
3333
config.api_only = true
34+
35+
tags_allowed = ENV['SANITIZED_ALLOWED_TAGS'] ? ENV['SANITIZED_ALLOWED_TAGS'].split(' ') : []
36+
config.action_view.sanitized_allowed_tags = tags_allowed
37+
attributes_allowed = ENV['SANITIZED_ALLOWED_ATTRIBUTES'] ? ENV['SANITIZED_ALLOWED_ATTRIBUTES'].split(' ') : []
38+
config.action_view.sanitized_allowed_attributes = attributes_allowed
3439
end
3540
end

0 commit comments

Comments
 (0)