Piszę kilka wtyczek Wordpress i mam problem z Wordpressem umieszczającym magiczne cytaty na danych POST i GET.
W szczególności funkcja „wp_magic_quotes” w \ wp-obejmuje \ load.php, która jest wywoływana (przypuszczalnie przy każdej odpowiedzi) w wp-settings.php. Ta funkcja dodaje magiczne cytaty do danych, nawet jeśli wyłączę magiczne cytaty w ustawieniach PHP.
/**
* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
*
* Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
* or $_ENV are needed, use those superglobals directly.
*
* @access private
* @since 3.0.0
*/
function wp_magic_quotes() {
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );
}
Czy mogę bezpiecznie komentować wywołanie wp_magic_quotes () w wp-settings.php? Czy to wpłynie negatywnie na normalny kod Wordpress i / lub otworzy jakiś wektor wykorzystania? Jeśli tak, to czy istnieje inny sposób na zrobienie tego poza modyfikacją kodu WP (więc nie muszę sobie z tym radzić za każdym razem, gdy pojawia się aktualizacja)?
wp_magic_quotes()
jest wykonywana? Nie mogłem znaleźć wykonania w wp-core.Odpowiedzi:
Mówiąc wprost, WP zamienia nieokreśloną sytuację (magiczne cytaty mogą lub nie mogą być włączone w konfiguracji serwera) na określone (magiczne cytaty są zawsze obecne, a konfiguracja serwera nie ma znaczenia).
Zamiast zadzierać z tym wszystkim rdzeniem WP, sensowniejsze jest po prostu usuwanie ukośników w kodzie na własnych zmiennych, kiedy jest to potrzebne.
źródło
Obecne zachowanie w WordPress jest najlepszą praktyką opartą na kompatybilności wszystkich systemów i konfiguracji PHP. WordPress zawsze znormalizował $ _GET, $ _POST, $ _COOKIE i $ _SERVER, aby je ciąć, i spodziewaj się, że będzie to kontynuował.
Aby wyodrębnić parametr POST lub GET, musimy napisać:
$value = stripslashes_deep($_POST['name']);
lubźródło
Myślę, że poniższe linki mogą pomóc:
źródło
Rozwiązanie problemu z tymi superglobalnymi tablicami napisałem w podobnym pytaniu w przepełnieniu stosu.
Polega na napisaniu jednej „metody akcesorium” (get / set) dla każdego superglobala, cięciu i usuwaniu w sposób przezroczysty. Więc użyjesz na przykład:
W ten sposób możesz powstrzymać się od bałaganu z superglobalami i cieszyć się rozwiązaniem, które będzie działać „lokalnie” dla twojego kodu, bez żadnych skutków ubocznych. Dla mnie było to najlepsze rozwiązanie.
źródło
Ostatnio miałem ten problem i w końcu go rozgryzłem. Zasadniczo przeszukiwałem prawie każdą stronę internetową pod kątem magicznych cytatów na WordPressie i żadna z nich nie pomogła.
Oto jak to naprawić:
Przejdź do swojego wp-settings.php
Szukaj wp_magic_quotes ();
Po prostu skomentuj to i powinno działać teraz
Działa to, ponieważ jeśli spojrzysz przed tym kodem, zobaczysz:
To, że Magic cytaty dodane później przy użyciu wpdb jest tym, co psuje większość ludzi, i zdarza się, że jest to wp_magic_quotes (). Komentowanie tego sprawi, że magiczne cytaty nie zepsują cię.
źródło