Limpar o conteúdo de wp_editor

8

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.)

Gio
fonte
em geral, apenas aplicar aleatoriamente a função com "higienizar" no nome pode não higienizar e não adicionar segurança. É impossível falar sobre segurança sem contexto completo, mas, em geral, você provavelmente deve usar um membro da wp_ksesfamília.
precisa saber é o seguinte
tente com a função wp_slash ($ value) antes de converter o valor.
Ravi Patel

Respostas:

4

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, como wp_kses_postou wp_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_Fragments

O 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_postfunção deve ser a escolha certa.

bueltge
fonte
3

Tentar

//save this in the database
$content=sanitize_text_field( htmlentities($_POST['content']) );

//to display, use
html_entity_decode($content);
  1. htmlentities() converterá todos os caracteres que possuem entidades de caracteres HTML equivalentes em seus equivalentes.
  2. sanitize_text_field()procurará caracteres UTF-8 inválidos e os retirará. Agora isso pode ser armazenado no banco de dados.
  3. html_entity_decode() converterá entidades HTML em seus equivalentes de tags HTML
Melch Wanga
fonte
2
Explique por que o pôster original deve usar essas funções.
precisa saber é o seguinte
Se você usa wp_editor () e deseja salvar $ _POST ['youreditor'] com outro monte de opções em sua própria estrutura de dados .. esta é a maneira .. Também adicionei wp_kses_post ()
Nissar
1

Você poderia fazer algo assim:

/ **
 * A maioria do HTML 'post' é excetuada e aceita <textarea>.
 * @link https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
 * /
$ allowed_html = wp_kses_allowed_html ('postagem');

// Remova a tag '<textarea>'
unset ($ allowed_html ['textarea']);

/ **
 * wp_kses_allowed_html retorna os valores incorretos para wp_kses,
 * precisa mudar "true" -> "array ()"
 * /
array_walk_recursive (
    $ allowed_html,
    função (& $ value) {
        if (is_bool ($ value)) {
            $ valor = matriz ();
        }
    }
);
// Execute a higienização.
$ value = wp_kses ($ value, $ allowed_html);

@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_ksescom "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

função wp_kses_post ($ data) {
    retornar wp_kses ($ data, 'post');
}
Joe
fonte
0

wp_slash Mais informações.

update_post_meta( $post_id, $prefix.'content',wp_slash($_POST['content']) );
Ravi Patel
fonte
Isso não deve ser usado para escapar dos dados que entram diretamente em uma consulta SQL. Do Wordpress.
bilimokur