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:
parent
11e2353c2f
commit
ccba54d5a7
3 changed files with 30 additions and 0 deletions
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue