5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 16:06:23 +00:00

fix: valida que no se puedan ingresar links en título y descripción #17494

This commit is contained in:
f 2024-10-02 17:17:18 -03:00
parent 11e2353c2f
commit ccba54d5a7
No known key found for this signature in database
3 changed files with 30 additions and 0 deletions

View file

@ -14,6 +14,16 @@ class Site < ApplicationRecord
include Site::DefaultOptions include Site::DefaultOptions
include Tienda include Tienda
# Valida un nombre de dominio:
#
# * Quizás empieza con xn--
# * Empieza con caracteres alfanuméricos o guión bajo
# * Contiene caracteres alfanuméricos y guiones medios
# * Puede tener hasta 63 caracteres
# * Cada parte termina con un punto
# * Termina sin punto
POSSIBLE_HOSTNAME = %r{((xn--)?[a-z0-9_][a-z0-9\-]{0,61}[a-z0-9]{0,1}\.){1,}(xn--)?[a-z0-9][a-z0-9\-_]{0,61}[a-z0-9]{0,1}}.freeze
self.filter_attributes += [/_key/, /_ciphertext\z/] self.filter_attributes += [/_key/, /_ciphertext\z/]
# Cifrar la llave privada que cifra y decifra campos ocultos. Sutty # Cifrar la llave privada que cifra y decifra campos ocultos. Sutty
@ -32,6 +42,7 @@ class Site < ApplicationRecord
validates :description, length: { in: 10..160 } validates :description, length: { in: 10..160 }
validate :deploy_local_presence validate :deploy_local_presence
validate :compatible_layouts, on: :update validate :compatible_layouts, on: :update
validate :prevent_autolinking
attr_reader :incompatible_layouts attr_reader :incompatible_layouts
@ -627,4 +638,15 @@ class Site < ApplicationRecord
compare < ::File.mtime(gemfile_lock_path) compare < ::File.mtime(gemfile_lock_path)
end end
end end
# Valida que el contenido de los campos de texto no contenga nombres
# de dominio, para evitar que al enviarlor por correo se generen
# autolinks maliciosos.
def prevent_autolinking
%i[title description].each do |attr|
next unless POSSIBLE_HOSTNAME.match?(public_send(attr))
errors.add(attr, I18n.t("activerecord.errors.models.site.attributes.#{attr}.possible_hostname"))
end
end
end end

View file

@ -384,6 +384,10 @@ en:
models: models:
site: site:
attributes: attributes:
description:
possible_hostname: "possibly contains a malicious link."
title:
possible_hostname: "possibly contains a malicious link."
deploys: deploys:
deploy_local_presence: 'We need to be build the site!' deploy_local_presence: 'We need to be build the site!'
design_id: design_id:

View file

@ -383,6 +383,10 @@ es:
models: models:
site: site:
attributes: attributes:
description:
possible_hostname: "es posible que contenga un vínculo malicioso."
title:
possible_hostname: "es posible que contenga un vínculo malicioso."
deploys: deploys:
deploy_local_presence: '¡Necesitamos poder generar el sitio!' deploy_local_presence: '¡Necesitamos poder generar el sitio!'
design_id: design_id: