Criei um tipo de postagem personalizado, onde podemos encontrar uma área de texto / tinymce padrão gerada por wp_editor()
e estou enfrentando um problema com a parte de economia.
Se eu salvar o conteúdo com o seguinte código:
update_post_meta( $post_id, $prefix.'content', $_POST['content'] );
Tudo está funcionando bem, mas não há segurança (sanitização, validação etc ...)
Se eu salvar o conteúdo com o seguinte código:
update_post_meta( $post_id, $prefix.'content', sanitize_text_field($_POST['content']) );
Resolvo o problema de segurança, mas perco todo o estilo, mídia etc. no conteúdo.
Qual poderia ser uma boa maneira de salvar o conteúdo com todo o estilo aplicado, a mídia inserida, mas incluindo uma higienização?
Eu li um pouco sobre, wp_kses()
mas não sei como poderia aplicar um bom filtro. (Permitindo tags comuns, qual devo bloquear? Etc.)
wp_kses
família.Respostas:
Em resumo: depende do seu contexto, dos dados dentro do seu editor.
wp_kses()
é realmente útil e você pode definir seu HTML permitido permitido. Alternativa, você pode usar as funções padrão, comowp_kses_post
ouwp_kses_data
. Essas funções são úteis para garantir que o HTML recebido do usuário contenha apenas elementos listados em branco. Consulte https://codex.wordpress.org/Data_Validation#HTML.2FXML_FragmentsO WordPress define muito mais funções para higienizar a entrada, consulte https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data e https://codex.wordpress.org/Data_Validation Estas páginas são realmente úteis.
No entanto, no seu contexto, a
wp_kses_post
função deve ser a escolha certa.fonte
Tentar
htmlentities()
converterá todos os caracteres que possuem entidades de caracteres HTML equivalentes em seus equivalentes.sanitize_text_field()
procurará caracteres UTF-8 inválidos e os retirará. Agora isso pode ser armazenado no banco de dados.html_entity_decode()
converterá entidades HTML em seus equivalentes de tags HTMLfonte
Você poderia fazer algo assim:
@fuxia: como o OP escreveu:
"Eu li um pouco sobre wp_kses (), mas não sei como aplicar um bom filtro. (Permitindo tags comuns, qual devo bloquear? etc.)"
wp_kses faz o seguinte:
"Esta função garante que apenas os nomes de elementos HTML permitidos, nomes de atributos e valores de atributos, além de apenas entidades HTML sãs, ocorram em $ string. Você deve remover quaisquer barras das aspas mágicas do PHP antes de chamar esta função. "
https://codex.wordpress.org/Function_Reference/wp_kses
Meu código usa
wp_kses
com "Permitindo tags comuns". Quais são as tags comuns? A lista disponível para leitura no link fornecido. É uma lista longa, então não a colei aqui.https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
Eu acho que a área de texto em si não deve ser permitida na área de texto.
@bueltge
wp_kses_post faz a mesma coisa, exceto permitir a tag '<textarea>', que - eu acho - não deveria ser.
https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/kses.php#L1575
fonte
wp_slash Mais informações.
fonte