Używamy zaawansowanych pól niestandardowych w naszej firmie i czasami potrzebujemy użyć krótkiego kodu w naszych niestandardowych polach. W kodzie php używamy następnie do_shortcode funkcje dla tych pól. Nie ma powodu, aby nie używać go dla większości pól, ponieważ może chcieć dodać skróty do pola później.

My ” ponownie używam PHP CodeSniffer z regułą WordPress Coding Standards. Za każdym razem, gdy używamy echo do_shortcode, ostrzeżenie o ucieczce znika. Czy więc bezpiecznie jest po prostu użyć do_shortcode, czy też musimy użyć np. wp_kses_post dodatkowo?

Czy jest jakaś sprawdzona metoda w tym zakresie?

Dziękuję za jakąś radę

Komentarze

  • do_shortcode nie służy do ucieczki.
  • No dobrze, ale dlaczego Codesniffer nie wyświetla żadnego ostrzeżenia?
  • Być może nie wyświetla pokaż ostrzeżenie, ponieważ funkcja renderująca shortcode powinna być odpowiedzialna za oczyszczanie jego danych wyjściowych. Ale do funkcji można przekazać dowolny ciąg i jeśli nie zawiera zarejestrowanych skrótów, to i ' m jestem prawie pewien, że ciąg nie zostanie w ogóle zmodyfikowany. Z pewnością nie jest to ogólna metoda odkażania. Sniffer kodu może zrobić tylko tyle. Przeczytaj tutaj, jak prawidłowo wyczyścić dane. Jest wiele funkcji, z których często korzystam to esc_attr, sanitize_text_field, esc_url. codex.wordpress.org/…

Odpowiedź

Standardy kodowania WordPressa traktują funkcję do_shortcode() jako „funkcję z automatycznymi znakami”. Wydaje się, że zostało to omówione w 2015 r. W tych wydaniach GitHub:

https://github.com/WordPress/WordPress-Coding-Standards/issues/167 https://github.com/WordPress/WordPress-Coding-Standards/issues/428

Wyjaśnienie użyte podczas dodawania go do listy brzmiało:

Omówiłem to z obsługą VIP (# 44195). David, po naradzie z innym członkiem zespołu, powiedział, że jest to niepotrzebne, ponieważ robimy ucieczkę w miejscu, w którym emitowany jest kod HTML (w kodzie shortcode).

Ale nie jestem pewien, czy zgadzam się z rozumowaniem. Jeśli użyłeś go w ten sposób:

<?php echo do_shortcode( "[liveperson]" ); ?> 

Gdzie krótki kod jest zakodowany na stałe, ma to sens, ponieważ jedyną rzeczą do ucieczki jest wyjście shortcode, które powinno być chronione przez wywołanie zwrotne shortcode.

Jednak w twojej sytuacji używasz do_shortcode(), aby umożliwić wykonywanie skrótów w tekście podanym przez użytkownika, z pola niestandardowego. Ten tekst musi zostać zmieniony, ale do_shortcode() nie wprowadza żadnego znaku zmiany znaczenia.

Dlatego bezpiecznym sposobem obsługi takich pól byłoby umieszczenie tekstu za pomocą wp_kses() lub wp_kses_post(), aby usunąć niedozwolone tagi, a następnie następnie umieść je przez do_shortcode(), aby skróty mogły być ex ecuted bez ponownej zmiany znaku ucieczki.

$text = get_field( "field_name" ); echo do_shortcode( wp_kses_post( $text ) ); 

Nie robi to żadnej różnicy w tym, co sniffer kodu robi / nie zgłasza, ale przynajmniej tekst dostarczony przez użytkownika jest oczyszczony.

Jednym z ograniczeń jest to, że nie będzie działać, jeśli użyjesz esc_html(), ponieważ będzie to kolidować z atrybutami shortcode. To dezynfekcja nie zapobiegnie również wprowadzaniu przez użytkowników niezrównoważonych tagów, które mogłyby wpłynąć na układ, co jest jedną z rzeczy, w których zwykle ucieczka jest pomocna. Aby rozwiązać ten problem, możesz dodać force_balance_tags():

$text = get_field( "field_name" ); echo do_shortcode( force_balance_tags( wp_kses_post( $text ) ) ); 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *