Skip to content

Sanitização

O editor aplica sanitização na colagem (e, em alguns campos, também durante a edição) nos componentes InputText, TextArea, RichText e Code. O conteúdo que não for permitido é removido ou bloqueado; quando isso ocorre, o usuário recebe uma mensagem informativa.
Abaixo veremos mais detalhes.

Objetivo

Reduzir o risco de XSS (Cross-Site Scripting) e de CSS malicioso quando o lojista cola conteúdo nos campos do editor do tema.
O fluxo principal é interceptar o evento de colagem e tratar o texto/HTML/CSS . Quando algo é removido ou bloqueado, o usuário vê uma mensagem informativa.

Esta camada no frontend oferece feedback imediato, reduz carga no servidor e evita erros antes do envio. O back-end mantém validação própria, a sanitização do editor não substitui a segurança do servidor.

Stack técnica

CamadaBibliotecaFunção
HTMLDOMPurifyLista de tags e atributos por tipo de campo.
CSSPostCSSRemove declarações e at-rules consideradas perigosas.

Segue tabela com o que cada campo permite de Tags e Atributos:

Tags

TagsPermitida em
aInputText, TextArea, RichText, Code
abbrRichText, Code
addressRichText, Code
articleRichText, Code
asideCode
audioCode
bInputText, TextArea, RichText, Code
blockquoteRichText, Code
brInputText, TextArea, RichText, Code
buttonCode
captionCode
citeRichText, Code
codeInputText, TextArea, RichText, Code
colCode
colgroupCode
datalistCode
ddCode
delRichText, Code
detailsRichText, Code
divRichText, Code
dlCode
dtCode
emInputText, TextArea, RichText, Code
figcaptionRichText, Code
figureRichText, Code
footerRichText, Code
h1RichText, Code
h2RichText, Code
h3RichText, Code
h4RichText, Code
h5RichText, Code
h6RichText, Code
headerRichText, Code
hrRichText, Code
iInputText, TextArea, RichText, Code
imgRichText, Code
labelCode
legendCode
liRichText, Code
markInputText, TextArea, RichText, Code
menuCode
navCode
olRichText, Code
pRichText, Code
pictureRichText, Code
preRichText, Code
progressCode
qInputText, TextArea, RichText, Code
sInputText, TextArea, RichText, Code
sectionRichText, Code
smallInputText, TextArea, RichText, Code
sourceRichText, Code
spanInputText, TextArea, RichText, Code
strongInputText, TextArea, RichText, Code
subInputText, TextArea, RichText, Code
summaryRichText, Code
supInputText, TextArea, RichText, Code
tableCode
tbodyCode
tdCode
tfootCode
thCode
theadCode
timeInputText, TextArea, RichText, Code
trCode
trackCode
uInputText, TextArea, RichText, Code
ulRichText, Code
videoCode

Atributos

Atenção:

Alguns dos atributos listados não podem ser usados em todas as tags HTML listadas acimas. É dever do desenvolvedor saber quais atributos podem ser usados com quais tags.

AtributosPermitido em
abbrRichText, Code
accesskeyCode
altRichText, Code
cellpaddingCode
cellspacingCode
citeRichText, Code
classInputText, TextArea, RichText, Code
clearCode
codeCode
colsCode
colspanCode
compactCode
controlsCode
controlslistCode
crossoriginCode
dataRichText, Code
datetimeInputText, TextArea, RichText, Code
decodingRichText, Code
defaultCode
directionCode
disablepictureinpictureCode
disableremoteplaybackCode
disallowdocumentaccessCode
downloadRichText, Code
draggableCode
elementtimingCode
endCode
faceCode
headersCode
heightRichText, Code
highCode
hrefInputText, TextArea, RichText, Code
hreflangRichText, Code
hreftranslateCode
hspaceCode
idInputText, TextArea, RichText, Code
imagesizesRichText, Code
imagesrcsetRichText, Code
importanceCode
incrementalCode
inertCode
kindCode
labelCode
langRichText, Code
latencyhintCode
leftmarginCode
linkCode
loadingRichText, Code
longdescCode
loopCode
lowCode
lowsrcCode
marginheightCode
marginwidthCode
mediaRichText, Code
mutedCode
nohrefCode
noresizeCode
noshadeCode
nowrapCode
openRichText, Code
optimumCode
playsinlineCode
posterCode
pseudoCode
referrerpolicyRichText, Code
relRichText, Code
resourcesCode
reversedRichText, Code
roleRichText, Code
rowsCode
rowspanCode
rulesCode
scopeCode
scrollamountCode
scrolldelayCode
scrollingCode
sizesRichText, Code
spanCode
spellcheckRichText, Code
srcRichText, Code
srclangCode
srcsetRichText, Code
standbyCode
startRichText, Code
stepCode
tabindexCode
targetRichText, Code
textCode
titleInputText, TextArea, RichText, Code
topmarginCode
translateRichText, Code
truespeedCode
valuetypeCode
vspaceCode
widthRichText, Code
wrapCode

Camada CSS

Usada quando o conteúdo colado é identificado como CSS.

Propriedades CSS Bloqueadas: deniedProps

PropriedadeRazão
behaviorPermite executar HTC scripts no IE
-moz-bindingXBL binding pode executar JS no Firefox antigo
expressionCSS expressions executam JS no IE
-ms-filterFiltros IE podem conter código
filterPode conter expressions no IE
-o-linkOpera pode seguir links arbitrários
-o-link-sourceFonte de link no Opera

Padrões de Valores Bloqueados: deniedValues

PropriedadeRazão
javascript:Execução de JavaScript via URL
vbscript:Execução de VBScript via URL
data:Data URIs podem conter scripts
expression(CSS expressions (IE)
url(javascript:)JS em propriedades url()
@importPode carregar CSS externo malicioso
\\00Caracteres escapados para bypass

Antes da análise principal, o editor remove linhas perigosas do tipo @import e @charset. Assim o CSS fica mais seguro e não quebra casos em que @import aparece só como texto dentro de uma propriedade.

No resultado final, podem faltar blocos vazios e as linhas podem ser reorganizadas, isso é esperado e não indica problema de segurança.


Mensagens ao usuário

  • Bloqueio total: "O código colado não pôde ser mantido por motivos de segurança. Verifique o manual do tema para saber mais."

  • Remoção parcial: "Parte do texto colado foi removido por motivos de segurança. Verifique o manual do tema para saber mais."