WordPress

dostosowywanie — nie można oczyścić w dostosowywaniu i uciec w motywie bez usunięcia możliwości użycia przez użytkownika „” w celu wstawienia końca wiersza

  • 1 grudnia, 2015
  • 3 min read
dostosowywanie — nie można oczyścić w dostosowywaniu i uciec w motywie bez usunięcia możliwości użycia przez użytkownika „” w celu wstawienia końca wiersza


Nie byłem w stanie wymyślić, jak mogę prawidłowo zdezynfekować (w dostosowywaniu) i uciec (w motywie, jednocześnie pozwalając użytkownikowi użyć „<” i „>”, aby wstawić „
” i dodać podział linii gdzie chcą.

Mam obszar w dostosowywaniu mojego motywu, który pozwala użytkownikowi umieścić tekst w polu tekstowym i wyprowadza go do głównego obszaru nagłówka witryny. Działa dobrze, ale nie wydaje się, aby naprawdę wyświetlał HTML, nawet przy użyciu esc_html().

Przejrzałem podstawowe funkcje dezynfekcji WordPress w poszukiwaniu czegoś, czego mogę użyć do wprowadzania danych w dostosowywaniu, takich jak:

  • sanitize_email
  • sanitize_html_class
  • sanitize_key

Przekopałem się przez kodeks, aby znaleźć sposoby na oczyszczenie danych wyjściowych w motywie, takich jak:

Używając któregokolwiek z nich, kończę na wydrukowaniu „
” na stronie, zamiast wstawiania końca linii. Jedyny sposób, w jaki udało mi się sprawić, by zachowywał się tak, jak chcę, to w ogóle go nie dezynfekować. Jeśli nie użyję wywołania zwrotnego sanitize w dostosowywaniu i w ogóle nie ucieknę przed wyjściem, użytkownik może umieścić „
” w polu tekstowym, a przeglądarka wstawi podział linii zamiast drukowania „
”.

Warto przeczytać!  Wtyczka Woocommerce do Google Analytics i Facebook Pixel Integration

Pomyślałem, że może mógłbym stworzyć niestandardową funkcję. Poszedłem do wp-includes/formatting.php myśląc, że mogę skopiować i edytować funkcję sanitize_html_class i znalazłem to:

function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
 * Filter a string cleaned and escaped for output in HTML.
 *
 * Text passed to esc_html() is stripped of invalid or special characters
 * before output.
 *
 * @since 2.8.0
 *
 * @param string $safe_text The text after it has been escaped.
 * @param string $text      The text prior to being escaped.
 */
return apply_filters( 'esc_html', $safe_text, $text );}

znalazłem też to:

function sanitize_html_class( $class, $fallback = '' ) {
//Strip out any % encoded octets
$sanitized = preg_replace( '|%[a-fA-F0-9][a-fA-F0-9]|', '', $class );

//Limit to A-Z,a-z,0-9,_,-
$sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $sanitized );

if ( '' == $sanitized )
    $sanitized = $fallback;

/**
 * Filter a sanitized HTML class string.
 *
 * @since 2.8.0
 *
 * @param string $sanitized The sanitized HTML class.
 * @param string $class     HTML class before sanitization.
 * @param string $fallback  The fallback string.
 */
return apply_filters( 'sanitize_html_class', $sanitized, $class, $fallback );}

 /**
 * Converts lone & characters into `&#038;` (a.k.a. `&amp;`)
 *
 * @since 0.71
 *
 * @param string $content    String of characters to be converted.
 * @param string $deprecated Not used.
 * @return string Converted string.
 */
function convert_chars( $content, $deprecated = '' ) {
if ( ! empty( $deprecated ) ) {
    _deprecated_argument( __FUNCTION__, '0.71' );
}

if ( strpos( $content, '&' ) !== false ) {
    $content = preg_replace( '/&([^#])(?![a-z1-4]{1,8};)/i', '&#038;$1', $content );
}

return $content;}

Czy istnieje sposób, w jaki mogę zmienić ich nazwę i edytować, aby utworzyć niestandardową funkcję, która pozwoli mi używać „<” i „>”, tak jak w HTML?

Warto przeczytać!  wpdb — Zaktualizuj adres e-mail użytkownika przez php — WP 4.7

Czy powinienem używać wp_kses w pliku motywu zamiast ucieczki?


Źródło